我正在使用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
?
3条答案
按热度按时间quhf5bfb1#
您可以在原始图的顶部绘制子图:
5q4ezhmt2#
另一个解决方案:
如果要突出显示具有特定名称的某些节点:
此外,您可以使用以下选项之一替换list(G.nodes):G,G.nodes,G.nodes()。所有这些都将给予相同的结果。第二个代码片段的示例输出:
rjjhvcjd3#
看看this answer。你所需要做的就是在
plt.text
中使用属性color=my_font_color[node]
(其中my_font_color
是一个字典,节点作为键,颜色名称作为值),你可以为你的节点设置任何你想要的字体颜色。它可以工作!