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的Django框架中的模版相关知识
Jul 15 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 Python
Django正则URL匹配实现流程解析
Nov 13 Python
python3中确保枚举值代码分析
Dec 02 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 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 文件缓存的性能测试
2010/04/25 PHP
用jquery来定位
2007/02/20 Javascript
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
jQuery 位置插件
2008/12/25 Javascript
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
python3图片转换二进制存入mysql
2013/12/06 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
更新升级python和pip版本后不生效的问题解决
2020/04/17 Python
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
经典优秀个人求职自荐信格式
2013/09/25 职场文书
小学教师学期末自我评价
2013/09/25 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
单位租房协议书范本
2014/12/04 职场文书
大一学生个人总结
2015/02/15 职场文书
门球健将观后感
2015/06/16 职场文书
个人更名证明
2015/06/23 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android