python3中NetworkX网络图绘制
2019-01-12
技术
NetworkX 是一个用于研究图结构和网络关系的 Python 库,可以用来创建图、分析图,也能快速画出常见的网络图。对于关系数据、流程数据、节点连接数据来说,它是非常实用的入门工具。
有了 NetworkX,你可以用标准或非标准的数据格式加载网络,生成随机图或经典图结构,并结合 matplotlib 完成基础可视化。
这篇文章重点演示 3 个最常见的场景:
- 绘制最基础的节点-边网络图
- 根据边的权重调整颜色和粗细
- 设置背景颜色,做出更容易展示的图
1.绘制最基本的网络图
网络图由节点(node)和连接(edge)构成,在networkx里,pandas的datafrmae每一行代表一个连接里面的点,对应位置产生连接,例子中是from和to的每一个对应位置产生连接。
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
df = pd.DataFrame({
'from': ['A', 'B', 'C', 'A'],
'to': ['D', 'A', 'E', 'C']
})
basic_net = nx.from_pandas_edgelist(df, 'from', 'to')
fig = plt.figure()
nx.draw(basic_net, with_labels=True)
plt.show()

使用NetworkX绘制网络图只需要上面简单的几步。
1.导入数据
basic_net = nx.from_pandas_edgelist(df, 'from', 'to')。当然,NetworkX 支持多种格式的数据导入,更多转换方式可以参考官方文档中的 convert 部分。
2.绘制图形
nx.draw(basic_net, with_labels=True)
3.显示
plt.show()
2.节点之间连接颜色大小区别
由于不同节点连接重要性不一样,使用大小不同线段或者颜色连接显得异常重要,这里NetworkX也很方便的提供了这个功能,只需要在绘制过程中制定edge_color即可。
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
df = pd.DataFrame({
'from': ['A', 'B', 'C', 'A'],
'to': ['D', 'A', 'E', 'C'],
'value': [1, 10, 5, 5]
})
color_net = nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.Graph())
fig = plt.figure()
nx.draw(
color_net,
with_labels=True,
node_color='skyblue',
node_size=1500,
edge_color=df['value'],
width=10.0
)
plt.show()

3.网络图背景颜色设置
在NetworkX里面只需要使用set_facecolor即可设置背景颜色
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
df = pd.DataFrame({
'from': ['A', 'B', 'C', 'A'],
'to': ['D', 'A', 'E', 'C'],
'value': [1, 10, 5, 5]
})
color_net = nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.Graph())
fig = plt.figure()
nx.draw(
color_net,
with_labels=True,
node_color='skyblue',
node_size=1500,
edge_color=df['value'],
width=10.0
)
fig.set_facecolor("#AAAA00")
plt.show()

实际绘图时的两个小建议
- 如果节点很多,优先先调布局,再调颜色和大小,否则图会非常乱。
- 如果边权重差异很大,可以把
width和edge_color同时绑定到权重,让重点连接更明显。
常见的布局函数包括:
nx.spring_layout(color_net)
nx.circular_layout(color_net)
nx.shell_layout(color_net)
总结
本文介绍了 NetworkX 绘制网络图的基础用法,包括基础连线、按权重设置边样式、以及背景样式控制。如果你正在做关系数据可视化,NetworkX 仍然是一个上手很快的选择,详细内容可以继续参考 NetworkX 官方文档。
- 原文作者:春江暮客
- 原文链接:https://www.bobobk.com/229.html
- 版权声明:本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。