最近需要绘制一些网络演示图,没找到合适的绘图工具,找了半天感觉学习成本都挺高的,感觉还是用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绘制网络图相关推荐

  1. python樱花制作教程_Python:绘制樱花树

    这篇文章参考了别人的博客<三月桃花开,用python给你带来你的桃花运,详细解析画一棵表白树>[1],原文作者:沙漏在下雨,这里简单记录一下学习过程. 这里使用的是python 的turt ...

  2. python绘制社会关系网络图_python networkx 包绘制复杂网络关系图的实现

    1. 创建一个图 import networkx as nx g = nx.Graph() g.clear() #将图上元素清空 所有的构建复杂网络图的操作基本都围绕这个g来执行. 2. 节点 节点的 ...

  3. python绘制社会关系网络图_Python networkx 网络图绘制

    简单演示 import networkx as nx import matplotlib.pyplot as plt # 定义空图 g = nx.Graph() # 增加节点 g.add_node(1 ...

  4. python画有权重网络图_python networkx 根据图的权重画图实现

    首先输入边和边的权重,随后画出节点位置,根据权重大小划分实边和虚边 #coding:utf-8 #!/usr/bin/env python """ An example ...

  5. python简笔画绘制 数据驱动绘图_python:绘制枫叶简笔画

    上面是枫叶的简笔图,我们怎么用python程序来完全模拟以上的图片呢?01今天为大家带来用python画枫叶的详细过程. 首先,我们保存上面的图片为"枫叶.jpg",放到pytho ...

  6. python程序写蛇_python蟒蛇绘制程序

    python蟒蛇绘制程序中第3行defmain():turtle.setup(1300,800,0,0)pythonsize=30turtle.pensize(pythonsize)turtle.pe ...

  7. python动态爱心代码_python 动态绘制爱心的示例

    python 动态绘制爱心的示例 代码 import turtle turtle.bgcolor("black") turtle.pensize(2) sizeh = 1.2 de ...

  8. python绘制樱花洒落_Python:绘制樱花树

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 代码详解 (一)绘制画幕 首先绘制画幕,命令说明如下: screen ...

  9. python pyecharts 合并地图_Python pyecharts 绘制的交通拥堵情况地图

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于Python干货铺子 ,作者:不正经的kimol君 前言 就在今天,我感受到了来自堵 ...

  10. python绘制地图线路_python pyecharts绘制地图

    效果 本文使用python库--pyecharts绘制地图,修改标签样式并调色.重点在于参数调用方法(理解Union[Sequence[str]]或者看源码). 效果如图: image.png 工具与 ...

最新文章

  1. R语言使用pwr包的pwr.f2.test函数对线性回归模型(Linear models)进行效用分析(power analysis)的语法
  2. 如何让你的 Linux 系统干净整洁
  3. 中国水闸橡胶密封件市场需求状况与营销模式建议报告2022年
  4. SQL Server 堆heap 非聚集索引 Nonclustered index 行号键查找RID loopup结合执行计划过程详解
  5. java文件下载并添加水印_Java下载文件加文字水印(Excel、PDF、图片)
  6. 音视频技术开发周刊 | 192
  7. 英特尔固态硬盘540s开卡_英特尔Z490主板绝配?技嘉PCIe 3.0 x8固态硬盘测试:6.5GB/s读速...
  8. datetime中strftime和strptime用法
  9. node2vec python_node2vec 安装失败经历
  10. arduino使用BCD电波对时模块获取时间
  11. 教你如何免费将XPS转换为PDF格式
  12. [硬件基础]开关电源和线性稳压器的优缺点?
  13. vb rs.RecordCount返回0的原因
  14. 解决cascader级联选择器报错“level“ of null
  15. Rstudio手动安装程序包
  16. Spring详解(超全面)
  17. “牛气冲天”预交卷,2022年雨花区会怎样“如虎添翼”?
  18. 云计算赛项--2020年赛题基础部分[任务3]
  19. 物联网技术部第六次培训总结
  20. Centos7中mysql安装配置

热门文章

  1. 最小生成树 无根树转有根树 树形动态规划
  2. oracle彻底删除dbf文件,ORACLE 删除数据文件模拟灾难恢复
  3. MI(mutal information)and Entropy
  4. 关于结构体、类、联合体、位域等所占内存大小计算
  5. WordPress主题分享:The7主题v10.11免费下载 2022年最新版
  6. 编写第一个WOW插件
  7. BIOS修改mbr为gpt的步骤
  8. 百度邓凯鹏:飞桨视觉技术解析与应用
  9. 浪潮存储助力方特动漫为《熊出没-狂野大陆》动物角色披上“动感毛发”
  10. java矩形面积_Java编程求矩形的面积