networkx 标签_NetworkX:是一个简单、多样化、能快速生成网络图形的Python库
1 说明:
=====
1.1 NetworkX是一个Python包,用于创建、操纵和研究复杂网络的结构、以及学习复杂网络的结构、功能及其动力学。
1.2 NetworkX测试的代码覆盖率超过90%,是一个多样化,易于教学,能快速生成图形的Python平台。
1.3 NetworkX提供了适合各种数据结构的图表、二合字母和多重图,还有大量标准的图算法,网络结构和分析措施,可以产生随机网络、合成网络或经典网络,且节点可以是文本、图像、XML记录等,并提供了一些示例数据(如权重,时间序列)。
1.4 附加知识:matplotlib的中文设置的另外一种方法。
2 准备:
=====
2.1 官网:
https://github.com/networkx/networkxhttp://networkx.github.io/https://pypi.org/project/networkx/https://networkx.github.io/documentation/stable/tutorial.html
2.2 安装:
pip install networkx
3 Erdos Renyi:
===========
3.1 代码:随机图
import matplotlib.pyplot as plt #用来显示图from networkx import nxn = 10 # 10 nodes=节点e = 20 # 20 edges=边线#随机图形G = nx.gnm_random_graph(n, e)#nx.draw(G) #默认节点node内不显示阿拉伯数字nx.draw(G,with_labels=True)plt.show()
3.2 图:
4 Node Colormap:
==============
4.1 代码:
import matplotlib.pyplot as pltimport networkx as nx#24,就是n=node,画椭圆G = nx.cycle_graph(24)#位置,iterations=迭代,建议200,否则就不是椭圆pos = nx.spring_layout(G, iterations=200)#cmap=代表colormap=颜色图#nx.draw(G, pos, node_color=range(24), node_size=800, cmap=plt.cm.Blues)#nx.draw(G, pos, node_color=range(24), node_size=800, cmap=plt.cm.Reds)#with_labels=True 在节点内显示阿拉伯数字标签nx.draw(G, pos, node_color=range(24), node_size=800, cmap=plt.cm.Reds,with_labels=True)plt.show()
4.2 图:
5 无向图、添加子图:
=======
5.1 代码:
import networkx as nximport matplotlib.pyplot as plt G = nx.Graph() #建立一个空的无向图GG.add_node('a') #添加一个节点1G.add_nodes_from(['b','c','d','e']) #加点集合#添加子图'''G.add_node(0) H=[1,2,3,4,5,6,7,8,9] G.add_nodes_from(H) '''#等同上面#H=[0,1,2,3,4,5,6,7,8,9] #方法一H=range(10) #方法二:python知识复习G.add_nodes_from(H) #显示节点标签nx.draw(G, with_labels=True)plt.show()
5.2 图:
6 中文显示:
=========
6.1 matplotlib另外一种中文显示设置。
6.2 本机操作示范:
6.2.1 在root下进入本机文件夹:注意本机为linux操作系统,window大同小异。
file:///usr/local/python3.8/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf
6.2.2 将自己的中文字体:hwfs.ttf(华文仿宋字体==用来显示中文的)放在ttf文件夹下。
6.2.3 因为matplotlib默认调用的为DejaVuSans.ttf字体文件,所以先将DejaVuSans.ttf复制一个,备份,取名为DejaVuSans_beifen.ttf,然后将hwfs.ttf改名为DejaVuSans.ttf,就可以显示中文了,超级简单。
7 人物关系权重图:weighted_graph
===========================
7.1 数据是虚拟的,这个很实用,人物关系权重图。
7.2 代码:
import matplotlib.pyplot as pltimport networkx as nxG = nx.Graph()#节点关系和权重G.add_edge("李白", "王维", weight=0.6)G.add_edge("李白", "杜甫", weight=0.2)G.add_edge("杜甫", "苏轼", weight=0.1)G.add_edge("杜甫", "王昌龄", weight=0.7)G.add_edge("杜甫", "杜牧", weight=0.9)G.add_edge("李白", "苏轼", weight=0.3)#定义权重与人物关系的指标赋值elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d["weight"] > 0.5]esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d["weight"] <= 0.5]#建立布局 pos = nx.spring_layout美化作用pos = nx.spring_layout(G)#节点布局和大小设置nx.draw_networkx_nodes(G, pos, node_size=700)#边的设置和宽度设置等nx.draw_networkx_edges(G, pos, edgelist=elarge, width=6)#style: 边的样式(默认为实现,可选: solid|dashed|dotted,dashdot)nx.draw_networkx_edges(G, pos, edgelist=esmall, width=6, alpha=0.5, edge_color="b", style="dashed")# labels标签名和字体大小设置nx.draw_networkx_labels(G, pos, font_size=10) #已经设置好中文显示#关闭网格线,不显示坐标轴线plt.axis("off")plt.show()
7.3 图:
8 高级版:
=======
8.1 代码省略。
8.2 结合flask、d3.js的网页动画的networkx。
===自己整理并分享出来===
喜欢的人,请点赞、关注、评论、转发和收藏。