How can one modify the outline color of a node In networkx?
我对networkx和使用matplotlib.pyplot进行绘制相对较新,并且想知道如何修改节点轮廓的颜色(或其他属性,例如权重)。"轮廓"并不是指两个节点之间的弧线或边缘;我的意思是,在绘制网络时,圆周围的细黑线默认用于表示节点。
因此,例如,当我制作一个只有一个节点的图并显示它时:
1 2 3 4 5 6 | 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):从networkx 2.1开始,kwargs从
好的,这有点hacky,但是可以用。这是我想出的。
问题
为了解决这个问题,我基本上将
解决方案
我们可以使用
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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() |
如果您将经常使用它,则重新定义
要完全去除标记边缘,只需将颜色设置为
从NetworkX 2.1开始,在
如果要更改节点轮廓的颜色,可以执行以下操作:
1 2 3 | draw(G, linewidths=2) ax = plt.gca() # to get the current axis ax.collections[0].set_edgecolor("#FF0000") |
就是这样。
-
ax.collections[0] 是管理节点的PathCollection 对象 -
ax.collections[1] 是控制边缘的LineCollection 对象(如果有)。
您可以使用给定的集合快速修改许多其他属性。
我知道这是一个antient线程,但是我也在寻找这个答案,最终找到了本机的非hacky方式。您可以将参数linewidths = 0传递给draw函数。我认为这仅影响节点边界的宽度,而不影响边缘宽度(由width = x控制)。