Python Matplotlib 基于networkx画关系网络图


Posted in Python onJuly 10, 2019

前言

昨天才开始接触,鼓捣了一个下午,接下来会持续更新,如果哪里有错误的地方,望各位大佬指出,谢谢!

数据描述

两个文件,一个文件包含了网络图的节点,节点存在类别(0,1,2,3)四类,但是0类别舍去,不画出;另一个文件包含了网络图的边,数据基本特征如下:

Python Matplotlib 基于networkx画关系网络图             Python Matplotlib 基于networkx画关系网络图

图1中,id表示节点,b是类别;图2中,两个数字表示边连接的两个点。

Networkx

安装

我的系统是Mac OS,直接在terminal输入sudo pip install networkx就可以安装,由于代码中涉及几个函数,在python3中会报错,我用python2.7.13实现的

基本使用方法

import networkx as nx          #导入networkx包
import matplotlib.pyplot as plt   #导入绘图包matplotlib(需要安装,方法见第一篇笔记)
G =nx.random_graphs.barabasi_albert_graph(100,1)  #生成一个BA无标度网络G
nx.draw(G)             #绘制网络G
plt.savefig("ba.png")      #输出方式1: 将图像存为一个png格式的图片文件
plt.show()              #输出方式2: 在窗口中显示这幅图像

参数介绍基本

- `node_size`: 指定节点的尺寸大小(默认是300,单位未知,就是上图中那么大的点)
- `node_color`: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,例如'r'为红色,'b'为绿色等,具体可查看手册)
- `node_shape`: 节点的形状(默认是圆形,用字符串'o'标识,具体可查看手册)
- `alpha`: 透明度 (默认是1.0,不透明,0为完全透明)
- `width`: 边的宽度 (默认为1.0)
- `edge_color`: 边的颜色(默认为黑色)
- `style`: 边的样式(默认为实现,可选: solid|dashed|dotted,dashdot)
- `with_labels`: 节点是否带标签(默认为True)
- `font_size`: 节点标签字体大小 (默认为12)
- `font_color`: 节点标签字体颜色(默认为黑色)

布局

  • circular_layout:节点在一个圆环上均匀分布
  • random_layout:节点随机分布
  • shell_layout:节点在同心圆上分布
  • spring_layout: 用Fruchterman-Reingold算法排列节点
  • spectral_layout:根据图的拉普拉斯特征向量排列节点

代码

# coding:utf-8
 
 
import networkx as nx 
import matplotlib.pyplot as plt
import csv
 
with open('node-8.csv','rb') as csvfile:
	reader = csv.DictReader(csvfile)
	column = [row['b'] for row in reader]
	id_tag0 = [row['id'] for row in reader]
#print column
id_tag = []
for item in id_tag0:
	id_tag.append(int(item))
 
# =================Setting node parameters====================
node_0 = []
node_1 = []
node_2 = []
node_3 = []
node_color = []
node_color_y = []
node_color_r = []
node_color_g = []
node_color_b = []
node_shape = []
node_shape_0 = []
node_shape_1 = []
node_shape_2 = []
node_shape_3 = []
 
for i in range(len(column)):
	if int(column[i]) == 0:
		pass
	elif int(column[i]) == 1:
		color = 'r'
		shape = 'o'
		node_1.append(i)
		node_color_r.append(color)
		node_shape_1.append(shape)
	elif int(column[i]) == 2:
		color = 'g'
		shape = 'o'
		node_2.append(i)
		node_color_g.append(color)
		node_shape_2.append(shape)
	else:
		color = 'b'
		shape = '*'
		node_3.append(i)
		node_color_b.append(color)
		node_shape_3.append(shape)
	node_color.append(color)
	node_shape.append(shape)
# ==============================================================
 
 
with open('node-8.csv','rb') as csvfile:
	reader = csv.DictReader(csvfile)
	column1 = [row['b'] for row in reader]
	id_tag1 = [row['id'] for row in reader]
#print column
id_tag11 = []
for item in id_tag1:
	id_tag11.append(int(item))
 
 
 
edge = []
with open('edge-8.txt','r') as f: 
	data = f.readlines() 
	for line in data:
		#print line
		line = tuple(line.replace('\r','').replace('\n','').replace('\t','').split(','))
		edge.append(line)
#print edge
 
# ===============Setting edge parameters=========================
edge_color = []
edge_style = []
 
for item in edge:
	#print item
	if int(column1[int(item[0])]) == 0 or int(column1[int(item[1])]) == 0:
		pass
	elif int(column1[int(item[0])]) == 1 or int(column1[int(item[1])]) == 1:
		color = 'r'
		#style0 = 'dashdot'
		#color_r_list.append(color)
	elif int(column1[int(item[0])]) == 2 or int(column1[int(item[1])]) == 2:
		color = 'g'
		#style0 = 'dashed'
		#color_r_list.append(color)
	else:
		color = 'b'
		#style0 = 'dotted'
		#color_b_list.append(color)
	edge_color.append(color)
	#edge_style.append(style0)
 
 
G = nx.Graph()
#G.add_nodes_from(id_tag)
G.add_edges_from(edge)
 
#nx.draw(G,pos=nx.random_layout(G), nodelist = node_0, node_color = node_color_y, node_size=120, node_shape=node_shape_0)
#nx.draw(G,pos=nx.random_layout(G), nodelist = node_1, node_color = node_color_r, node_size=120, node_shape=node_shape_1)
#nx.draw(G,pos=nx.random_layout(G), nodelist = node_2, node_color = node_color_g, node_size=120, node_shape=node_shape_2)
#nx.draw(G,pos=nx.random_layout(G), nodelist = node_3, node_color = node_color_b, node_size=120, node_shape=node_shape_3)
 
nx.draw_networkx(G,pos=nx.random_layout(G),node_color=node_color,node_size=10,node_shape='o',edge_color=edge_color,width=0.3,style='solid',font_size=8) 
#nx.draw_networkx(G,pos=nx.random_layout(G),nodelist = node_1,node_color=node_color,node_size=100,node_shape='o',style='dashdot') 
#nx.draw_networkx(G,pos=nx.random_layout(G),node_color=color_g_list,node_size=150,node_shape='^',style='dashed') 
#nx.draw_networkx(G,pos=nx.random_layout(G),node_color=color_b_list,node_size=150,node_shape='*',style='dotted') 
 
#plt.legend()
#nx.draw_networkx(G)
plt.show()

画图

Python Matplotlib 基于networkx画关系网络图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
编程语言Python的发展史
Sep 26 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
python登录pop3邮件服务器接收邮件的方法
Apr 30 Python
python任务调度实例分析
May 19 Python
python 多线程实现检测服务器在线情况
Nov 25 Python
简单介绍Python中的几种数据类型
Jan 02 Python
Python递归函数定义与用法示例
Jun 02 Python
Python实现感知机(PLA)算法
Dec 20 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
python线程中的同步问题及解决方法
Aug 29 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
我们为什么要减少Python中循环的使用
Jul 10 #Python
详解Python中的各种转义符\n\r\t
Jul 10 #Python
使用python画社交网络图实例代码
Jul 10 #Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 #Python
python 寻找离散序列极值点的方法
Jul 10 #Python
Python中面向对象你应该知道的一下知识
Jul 10 #Python
python实现函数极小值
Jul 10 #Python
You might like
多个PHP中文字符串截取函数
2013/11/12 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
详解JavaScript函数
2015/12/01 Javascript
纯JS实现轮播图
2017/02/22 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
为什么推荐使用JSX开发Vue3
2020/12/28 Vue.js
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python中给List添加元素的4种方法分享
2014/11/28 Python
解决Python一行输出不显示的问题
2018/12/03 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
C#基础面试题
2016/10/17 面试题
中药学专业求职信
2014/05/31 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
PHP策略模式写法
2021/04/01 PHP
Python 如何实现文件自动去重
2021/06/02 Python
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python