使用networkx绘制图形时,如何在边缘上使用颜色?

时间:2020-01-15 18:36:27

标签: python networkx

在使用networkx进行绘制时,如何使用颜色值来处理一组边缘?

例如,它绘制了3个节点,

edges = pd.DataFrame({'node_1': [1, 2, 3],
                      'node_2': [2, 3, 1],
                      'edge_id': [5, 4, 6]})

G = nx.from_pandas_edgelist(edges, 'node_1', 'node_2', True, nx.Graph())
nx.draw(G, node_size = 100)
plt.draw()
plt.show()

如何使用这样的数据在边缘上着色?



draw = pd.DataFrame({'edge_id': [5, 4, 6],
                    'edge_colour': ['AE6017', 'F15B2E', 'F15B2E']})

1 个答案:

答案 0 :(得分:0)

您可以在单独的步骤中绘制边缘和节点。您可以在其中为其中任何一种提供颜色列表。为了分别绘制它们,首先需要计算它们的位置。对于大多数图形,调用spring_layout可获得最佳布局。

演示代码:

import pandas as pd
import matplotlib.pyplot as plt
import networkx as nx

edges = pd.DataFrame({'node_1': [1, 2, 3],
                      'node_2': [2, 3, 1],
                      'edge_id': [5, 4, 6]})
G = nx.from_pandas_edgelist(edges, 'node_1', 'node_2', True, nx.Graph())

pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size = 100, node_color='deepskyblue')
cmap_colors = plt.cm.Set1.colors
edge_colors = [cmap_colors[edge_ind %  len(cmap_colors)] for edge_ind in range(len(G.edges))]
nx.draw_networkx_edges(G, pos, width=1.0, edge_color=edge_colors)

plt.show()

result

或者,您可以将nx.draw替换为nx.draw_networkxnx.draw_networkxnx.draw类似,但允许更多选择。如果需要,您可以给出位置,如果不需要,则可以自动计算。它接受与edge_color=...相同的nx.draw_networkx_edges