python绘制社会关系网络图_Python-NetworkX绘制网络图
最近需要绘制一些网络演示图,没找到合适的绘图工具,找了半天感觉学习成本都挺高的,感觉还是用Python搞效率高一些。之前用igraph的时候凑巧看过networkx,觉得和igraph-python相比,这个库至少是给人类用的,而且这个包好像是内置Graphviz的,不如我也用这个加matplotlib去绘图试试。
今天试着画一个二分网络无向图,并且用圈圈表现出其社团关系,颜色表示节点种类。
1. 创建网络
G = nx.Graph()
G.add_node('1')
G.add_nodes_from(['2', '3'])
#注意如果加进去临边有未出现的节点,会自动创建节点
G.add_edge(1, 2)
G.add_edge('1', '2')
#实际上edges是个hash的key,还可以对应一个value
G.add_edge(n1, n2, object=x)
G.add_edges_from([('1', '2'), ('1', '3')])
list(G.adj['1'])
G.degree['1']
G.remove_node('2')
G.remove_edge('1', '3')
2. 为节点添加属性
G[1][3]['color'] = "blue"
G.edges[1, 2]['color'] = "red"
3. 快速遍历所有临边
FG = nx.Graph()
FG.add_weighted_edges_from([(1, 2, 0.125), (1, 3, 0.75), (2, 4, 1.2), (3, 4, 0.375)])
for n, nbrs in FG.adj.items():
for nbr, eattr in nbrs.items():
wt = eattr['weight']
if wt < 0.5: print('(%d, %d, %.3f)' % (n, nbr, wt))
4. 为图,节点,边添加属性
G = nx.Graph(day="Friday")
G.graph
5. 为节点添加属性
G.add_node(1, time='5pm')
G.add_nodes_from([3], time='2pm')
G.nodes[1]
G.nodes[1]['room'] = 714
G.nodes.data()
6. 为临边添加属性
G.add_edge(1, 2, weight=4.7 )
G.add_edges_from([(3, 4), (4, 5)], color='red')
G.add_edges_from([(1, 2, {'color': 'blue'}), (2, 3, {'weight': 8})])
G[1][2]['weight'] = 4.7
G.edges[3, 4]['weight'] = 4.2
#注意的是weight这个属性不能胡乱用,这个是算法库里面处理时看做临边权重的属性,必须是数值型的。
7. 创建有向图
DG = nx.DiGraph()
DG.add_weighted_edges_from([(1, 2, 0.5), (3, 1, 0.75)])
#这个方向是按照第一个元素->第二个元素的
DG.out_degree(1, weight='weight') #0.5
DG.degree(1, weight='weight') #1.25
H = nx.Graph(DG)#有向图转为无向图
8. 创建multigraph
>>> MG = nx.MultiGraph()
>>> MG.add_weighted_edges_from([(1, 2, 0.5), (1, 2, 0.75), (2, 3, 0.5)])
>>> dict(MG.degree(weight='weight'))
{1: 1.25, 2: 1.75, 3: 0.5}
>>> GG = nx.Graph()
>>> for n, nbrs in MG.adjacency():
... for nbr, edict in nbrs.items():
... minvalue = min([d['weight'] for d in edict.values()])
... GG.add_edge(n, nbr, weight = minvalue)
...
>>> nx.shortest_path(GG, 1, 3)
[1, 2, 3]
9. 基础做图
G = nx.petersen_graph()
plt.subplot(121)
nx.draw(G, with_labels=True, font_weight='bold')
plt.subplot(122)
#这个draw_shell好像是按照某种叫shell的布局绘制
nx.draw_shell(G, nlist=[range(5, 10), range(5)], with_labels=True, font_weight='bold')
#传入选项
options = {
'node_color': 'black',
'node_size': 100,
'width': 3,
}
# 四种布局
plt.subplot(221)
nx.draw_random(G, **options)
plt.subplot(222)
nx.draw_circular(G, **options)
plt.subplot(223)
nx.draw_spectral(G, **options)
plt.subplot(224)
nx.draw_shell(G, nlist=[range(5,10), range(5)], **options)
1. 实战
1.1 画一个二分网络图,两类节点不同颜色,每个节点上有id,临边的颜色代表值,然后画两个区域。
B = nx.Graph()
B.add_nodes_from(['u1','u2','u3','u4'], bipartite='user')
B.add_nodes_from(['i1','i2','i3'], bipartite='item')
B.add_edge('u1','i1',weight=3)
B.add_edge('u1','i2',weight=4)
B.add_edge('u2','i1',weight=5)
B.add_edge('u2','i3',weight=1)
B.add_edge('u3','i3',weight=3)
B.add_edge('u4','i3',weight=4)
from networkx.algorithms import bipartite
import matplotlib as mpl
#区域就算了 搞了一下午还是没捣鼓出来怎么画
X = ['u1','u2','u3','u4']
Y = ['i1','i2','i3']
Edges = []
pos = dict()
pos.update( (n, (1, i)) for i, n in enumerate(X) )
pos.update( (n, (2, i+0.5)) for i, n in enumerate(Y) )
nx.draw_networkx_nodes(B, pos, nodelist=X, node_color='slategray',alpha=0.95, node_size = 350, with_labels=False)
nx.draw_networkx_nodes(B, pos, nodelist=Y, node_color='steelblue',alpha=0.95, node_size = 350, with_labels=False)
nx.draw_networkx_labels(B,pos)
colors = [ B.edges[u,i]['weight'] for u,i in B.edges]
edges = nx.draw_networkx_edges(B, pos = pos, edge_color = colors,
width=3, edge_cmap=plt.cm.Blues, with_labels=False, edge_vmin = 0, alpha=0.9)
pc = mpl.collections.PatchCollection(Edges, cmap=plt.cm.Blues)
pc.set_array(colors)
plt.colorbar(pc)
ax = plt.gca()
ax.set_axis_off()
plt.show()
python绘制社会关系网络图_Python-NetworkX绘制网络图相关推荐
- python樱花制作教程_Python:绘制樱花树
这篇文章参考了别人的博客<三月桃花开,用python给你带来你的桃花运,详细解析画一棵表白树>[1],原文作者:沙漏在下雨,这里简单记录一下学习过程. 这里使用的是python 的turt ...
- python绘制社会关系网络图_python networkx 包绘制复杂网络关系图的实现
1. 创建一个图 import networkx as nx g = nx.Graph() g.clear() #将图上元素清空 所有的构建复杂网络图的操作基本都围绕这个g来执行. 2. 节点 节点的 ...
- python绘制社会关系网络图_Python networkx 网络图绘制
简单演示 import networkx as nx import matplotlib.pyplot as plt # 定义空图 g = nx.Graph() # 增加节点 g.add_node(1 ...
- python画有权重网络图_python networkx 根据图的权重画图实现
首先输入边和边的权重,随后画出节点位置,根据权重大小划分实边和虚边 #coding:utf-8 #!/usr/bin/env python """ An example ...
- python简笔画绘制 数据驱动绘图_python:绘制枫叶简笔画
上面是枫叶的简笔图,我们怎么用python程序来完全模拟以上的图片呢?01今天为大家带来用python画枫叶的详细过程. 首先,我们保存上面的图片为"枫叶.jpg",放到pytho ...
- python程序写蛇_python蟒蛇绘制程序
python蟒蛇绘制程序中第3行defmain():turtle.setup(1300,800,0,0)pythonsize=30turtle.pensize(pythonsize)turtle.pe ...
- python动态爱心代码_python 动态绘制爱心的示例
python 动态绘制爱心的示例 代码 import turtle turtle.bgcolor("black") turtle.pensize(2) sizeh = 1.2 de ...
- python绘制樱花洒落_Python:绘制樱花树
Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 代码详解 (一)绘制画幕 首先绘制画幕,命令说明如下: screen ...
- python pyecharts 合并地图_Python pyecharts 绘制的交通拥堵情况地图
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于Python干货铺子 ,作者:不正经的kimol君 前言 就在今天,我感受到了来自堵 ...
- python绘制地图线路_python pyecharts绘制地图
效果 本文使用python库--pyecharts绘制地图,修改标签样式并调色.重点在于参数调用方法(理解Union[Sequence[str]]或者看源码). 效果如图: image.png 工具与 ...
最新文章
- R语言使用pwr包的pwr.f2.test函数对线性回归模型(Linear models)进行效用分析(power analysis)的语法
- 如何让你的 Linux 系统干净整洁
- 中国水闸橡胶密封件市场需求状况与营销模式建议报告2022年
- SQL Server 堆heap 非聚集索引 Nonclustered index 行号键查找RID loopup结合执行计划过程详解
- java文件下载并添加水印_Java下载文件加文字水印(Excel、PDF、图片)
- 音视频技术开发周刊 | 192
- 英特尔固态硬盘540s开卡_英特尔Z490主板绝配?技嘉PCIe 3.0 x8固态硬盘测试:6.5GB/s读速...
- datetime中strftime和strptime用法
- node2vec python_node2vec 安装失败经历
- arduino使用BCD电波对时模块获取时间
- 教你如何免费将XPS转换为PDF格式
- [硬件基础]开关电源和线性稳压器的优缺点?
- vb rs.RecordCount返回0的原因
- 解决cascader级联选择器报错“level“ of null
- Rstudio手动安装程序包
- Spring详解(超全面)
- “牛气冲天”预交卷,2022年雨花区会怎样“如虎添翼”?
- 云计算赛项--2020年赛题基础部分[任务3]
- 物联网技术部第六次培训总结
- Centos7中mysql安装配置
热门文章
- 最小生成树 无根树转有根树 树形动态规划
- oracle彻底删除dbf文件,ORACLE 删除数据文件模拟灾难恢复
- MI(mutal information)and Entropy
- 关于结构体、类、联合体、位域等所占内存大小计算
- WordPress主题分享:The7主题v10.11免费下载 2022年最新版
- 编写第一个WOW插件
- BIOS修改mbr为gpt的步骤
- 百度邓凯鹏:飞桨视觉技术解析与应用
- 浪潮存储助力方特动漫为《熊出没-狂野大陆》动物角色披上“动感毛发”
- java矩形面积_Java编程求矩形的面积