欢迎访问宙启技术站
智能推送

通过Python绘制多种网络图形

发布时间:2023-12-11 12:12:49

网络图是图论中研究的一种特殊图形,用于描述一组对象之间的关系。Python中有多个库可以用于绘制各种类型的网络图,包括NetworkX、igraph和PyGraphviz等。

下面我将使用NetworkX库为你介绍一些常见的网络图形,并附上使用示例。

1. 无向图(Undirected Graph):每条边没有方向,表示节点之间的无序关系。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_edges_from([(1, 2), (2, 3), (3, 1)])
nx.draw(G, with_labels=True)
plt.show()

2. 有向图(Directed Graph):每条边带有一个方向,表示节点之间的有序关系。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()
G.add_edges_from([(1, 2), (3, 2), (2, 3)])
nx.draw(G, with_labels=True)
plt.show()

3. 加权图(Weighted Graph):每条边都有一个权重值,表示节点之间的关系强度。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_edge(1, 2, weight=0.5)
G.add_edge(2, 3, weight=1.5)
G.add_edge(3, 1, weight=2.0)
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True)
labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)
plt.show()

4. 二部图(Bipartite Graph):节点可以被分为两个不相交的集合,但每条边都连接两个不同的集合中的节点。

import networkx as nx
import matplotlib.pyplot as plt

B = nx.Graph()
B.add_nodes_from([1, 2, 3, 4], bipartite=0)
B.add_nodes_from(['a', 'b', 'c'], bipartite=1)
B.add_edges_from([(1, 'a'), (1, 'b'), (2, 'b'), (2, 'c'), (3, 'c'), (4, 'a')])
pos = nx.bipartite_layout(B, [1, 2, 3, 4])
nx.draw(B, pos, with_labels=True)
plt.show()

5. 带权二部图(Weighted Bipartite Graph):在二元图的基础上,每条边带有一个权重值。

import networkx as nx
import matplotlib.pyplot as plt

B = nx.Graph()
B.add_nodes_from([1, 2, 3, 4], bipartite=0)
B.add_nodes_from(['a', 'b', 'c'], bipartite=1)
B.add_weighted_edges_from([(1, 'a', 0.5), (1, 'b', 1.0), (2, 'b', 1.5),
                          (2, 'c', 2.0), (3, 'c', 2.5), (4, 'a', 3.0)])
pos = nx.bipartite_layout(B, [1, 2, 3, 4])
nx.draw(B, pos, with_labels=True)
labels = nx.get_edge_attributes(B, 'weight')
nx.draw_networkx_edge_labels(B, pos, edge_labels=labels)
plt.show()

除了以上几种常见的网络图形,NetworkX还支持绘制更多类型的网络图,如多重图(MultiGraph)、重复图(Duplicate Graph)和混合图(Mixed Graph)等。通过不同的图形和节点之间的连接关系,你可以根据需要选择适当的网络图形并绘制出来,有助于更好地展示、分析和理解复杂的关系网络。