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在命令行下使用google翻译(带语音)
Jan 16 Python
python实现得到一个给定类的虚函数
Sep 28 Python
用Python制作简单的钢琴程序的教程
Apr 01 Python
在Python中操作字典之fromkeys()方法的使用
May 21 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
Python 字典与字符串的互转实例
Jan 13 Python
有趣的python小程序分享
Dec 05 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 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处理斐波那契数列非递归方法
2012/02/04 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
图片自动更新(说明)
2006/10/02 Javascript
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
基于vue实现分页效果
2017/11/06 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
python判断字符串是否纯数字的方法
2014/11/19 Python
极简的Python入门指引
2015/04/01 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Python注释详解
2016/06/01 Python
深入理解Python变量与常量
2016/06/02 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
python给微信好友定时推送消息的示例
2019/02/20 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
广告设计专业自荐信范文
2013/11/14 职场文书
石油工程专业毕业生求职信
2014/04/13 职场文书
入党推优材料
2014/06/02 职场文书
2014年体育部工作总结
2014/11/13 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server