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的函数嵌套的使用方法
Jan 24 Python
Python解决鸡兔同笼问题的方法
Dec 20 Python
Python是编译运行的验证方法
Jan 30 Python
python获取当前计算机cpu数量的方法
Apr 18 Python
Python中用函数作为返回值和实现闭包的教程
Apr 27 Python
python中的编码知识整理汇总
Jan 26 Python
Windows安装Python、pip、easy_install的方法
Mar 05 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
详解python算法之冒泡排序
Mar 05 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 Python
Python生成器传参数及返回值原理解析
Jul 22 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
私人会所最新创业计划书范文
2014/03/24 职场文书
机械操作工岗位职责
2014/08/08 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
出国导师推荐信
2015/03/25 职场文书
2016国培研修心得体会
2016/01/08 职场文书
创业计划书之宠物店
2019/09/19 职场文书
vue实现Toast组件轻提示
2022/04/10 Vue.js