gpt4 book ai didi

python - 如何修改networkx中节点的轮廓颜色?

转载 作者:IT老高 更新时间:2023-10-28 21:17:15 26 4
gpt4 key购买 nike

我对 networkx 和使用 matplotlib.pyplot 绘图相对较新,我想知道如何修改节点轮廓的颜色(或其他属性,如权重)。我所说的“轮廓”不是指两个节点之间的弧线或边线。我的意思是圆圈周围的细黑线,默认情况下用于表示绘制网络时的节点。

例如,当我制作一个只有一个节点的图表并显示它时:

from networkx import *
import matplotlib.pyplot as plt
plt.ion()
G = Graph()
G.add_node(1)
draw(G)

我看到一个带有细黑色轮廓的红色节点(里面有一个黑色的“1”,这是节点的标签)。如何将该轮廓的颜色从黑色更改为红色(“#FF0000”)或其他颜色?或者,我可以完全抑制轮廓的显示吗?

我想一定有一个属性,类似于 edge_color 或 node_color,我可以设置。但是,我无法通过网络搜索、networkx 文档或查看图库示例找到这样的属性。如果有人可以指出我将不胜感激的适当属性。谢谢!

最佳答案

更新(3/2019):as of networkx 2.1, the kwargs are forwarded来自 draw(),因此您应该能够简单地使用 edge_color kwarg 调用 draw()

好的,这有点老套,但它确实有效。这是我想出的。

问题

networkx.draw() 调用 networkx.draw_networkx_nodes(),然后调用 pyplot.scatter() 来绘制节点。问题是 draw_networkx_nodes() 接受的关键字 args 没有传递给 scatter()。 (source here)


为了解决这个问题,我基本上将 networkx.draw() 分解为它的组件:draw_networkx_nodesdraw_networkx_edgesdraw_networkx_labels .

解决方案

我们可以取draw_networkx_nodes()的返回值——一个PathCollection——并对其进行操作:你可以使用PathCollection.set_edgecolor()PathCollection.set_edgecolors() 分别带有颜色或列表。

示例代码:

from networkx import *
import matplotlib.pyplot as plt
G = Graph()
G.add_node(1)
# Need to specify a layout when calling the draw functions below
# spring_layout is the default layout used within networkx (e.g. by `draw`)
pos = spring_layout(G)
nodes = draw_networkx_nodes(G, pos)
# Set edge color to red
nodes.set_edgecolor('r')
draw_networkx_edges(G, pos)
# Uncomment this if you want your labels
## draw_networkx_labels(G, pos)
plt.show()

如果您要经常使用它,重新定义 draw_networkx_nodes 以实际将 kwargs 传递给 scatter 可能更有意义 (IMO)。但是上面的工作。

要完全移除标记边缘,只需将颜色设置为 None 而不是 'r'

关于python - 如何修改networkx中节点的轮廓颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22716161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com