春江暮客

春江暮客的个人学习分享网站

python3中NetworkX网络图绘制

2019-01-12 技术
python3中NetworkX网络图绘制

NetworkX 是一个用于研究图结构和网络关系的 Python 库,可以用来创建图、分析图,也能快速画出常见的网络图。对于关系数据、流程数据、节点连接数据来说,它是非常实用的入门工具。

有了 NetworkX,你可以用标准或非标准的数据格式加载网络,生成随机图或经典图结构,并结合 matplotlib 完成基础可视化。

这篇文章重点演示 3 个最常见的场景:

  1. 绘制最基础的节点-边网络图
  2. 根据边的权重调整颜色和粗细
  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()

python3中NetworkX网络图绘制

使用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()

python3中NetworkX网络图绘制color_net

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()

python3中NetworkX网络图绘制color_back_net

实际绘图时的两个小建议

  1. 如果节点很多,优先先调布局,再调颜色和大小,否则图会非常乱。
  2. 如果边权重差异很大,可以把 widthedge_color 同时绑定到权重,让重点连接更明显。

常见的布局函数包括:

nx.spring_layout(color_net)
nx.circular_layout(color_net)
nx.shell_layout(color_net)

总结

本文介绍了 NetworkX 绘制网络图的基础用法,包括基础连线、按权重设置边样式、以及背景样式控制。如果你正在做关系数据可视化,NetworkX 仍然是一个上手很快的选择,详细内容可以继续参考 NetworkX 官方文档

友情链接

其它