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 中文字符串的处理实现代码
Oct 25 Python
Python中的面向对象编程详解(下)
Apr 13 Python
django实现分页的方法
May 26 Python
python各种语言间时间的转化实现代码
Mar 23 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
python 实现selenium断言和验证的方法
Feb 13 Python
python程序变成软件的实操方法
Jun 24 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
pandas之分组groupby()的使用整理与总结
Jun 18 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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 获取目录下的图片并随机显示的代码
2009/12/28 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
Javascript继承机制详解
2017/05/30 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
Python处理CSV与List的转换方法
2018/04/19 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
python实现局域网内实时通信代码
2019/12/22 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
2020/02/26 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
《维生素c的故事》教学反思
2014/02/18 职场文书
教师业务培训方案
2014/05/01 职场文书
自主招生教师推荐信
2014/05/10 职场文书
事业单位考核材料
2014/05/21 职场文书
工会工作个人总结
2015/03/03 职场文书
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android