matplotlib 在draw_networkx可视化中高亮显示一个节点,而不更改节点颜色

pn9klfpd  于 2023-04-07  发布在  其他
关注(0)|答案(3)|浏览(140)

我正在使用NetworkX来可视化一个大于1000个节点的大型图形。作为可视化的一部分,我希望能够突出显示某些节点。
我看过this question,我知道NetworkX将允许您通过像这样更改节点颜色来突出显示节点:

import networkx as nx
import matplotlib.pyplot as plt
edges = [['A','B'], ['A','C'], ['A','D'], ['B','E'], ['B','F'], ['D','G'],['D','H'],['F','I'],['G','J'],['A','K']]
G = nx.Graph()
G.add_edges_from(edges)

colours = ['blue']*5 + ['red'] + ['blue']*5
nx.draw_networkx(G, font_size=16, node_color=colours)
plt.show()

但是,对于大量的节点,我不得不显著地减小节点的大小,否则它只是看起来像一个模糊的重叠节点云,所以改变节点的颜色是无效的。
理想情况下,我想做的是将所选节点的文本标签的标签字体颜色更改为红色。然而,与node_color不同,NetworkX似乎只提供了一个全局参数font_color来更改所有节点标签的颜色,它不会接受,例如font_color=colours
是否有任何方法可以通过NetworkX或Matplotlib更改特定节点/节点组的字体颜色,或添加任何类型的调用,或任何其他方法来突出显示某些节点而不依赖于更改node_color

quhf5bfb

quhf5bfb1#

您可以在原始图的顶部绘制子图:

# generate node positions:
pos = nx.spring_layout(G)

# draw graph
nx.draw_networkx(G, pos=pos, font_size=16, node_color='blue', font_color='white')

# draw subgraph for highlights
nx.draw_networkx(G.subgraph('F'), pos=pos, font_size=16, node_color='red', font_color='green')

5q4ezhmt

5q4ezhmt2#

另一个解决方案:

import networkx as nx
import matplotlib.pyplot as plt

edges = [['A', 'B'], ['A', 'C'], ['A', 'D'], ['B', 'E'], ['B', 'F'],     ['D', 'G'], ['D', 'H'], ['F', 'I'], ['G', 'J'],
     ['A', 'K']]
G = nx.Graph()
G.add_edges_from(edges)

colors = ['red' if node_name == 'F' else 'blue' for node_name in list(G.nodes)]
nx.draw_networkx(G, font_size=16, node_color=colors, with_labels=True)
plt.show()

如果要突出显示具有特定名称的某些节点:

import networkx as nx
import matplotlib.pyplot as plt

edges = [['A', 'B'], ['A', 'C'], ['A', 'D'], ['B', 'E'], ['B', 'F'], ['D', 'G'], ['D', 'H'], ['F', 'I'], ['G', 'J'],
     ['A', 'K']]
G = nx.Graph()
G.add_edges_from(edges)

highlight_nodes = ['A', 'F', 'B']
colors = ['red' if node_name in highlight_nodes else 'blue' for node_name in list(G.nodes)]
nx.draw_networkx(G, font_size=16, node_color=colors, with_labels=True)
plt.show()

此外,您可以使用以下选项之一替换list(G.nodes):G,G.nodes,G.nodes()。所有这些都将给予相同的结果。第二个代码片段的示例输出:

rjjhvcjd

rjjhvcjd3#

看看this answer。你所需要做的就是在plt.text中使用属性color=my_font_color[node](其中my_font_color是一个字典,节点作为键,颜色名称作为值),你可以为你的节点设置任何你想要的字体颜色。它可以工作!

相关问题