我对networkx和使用matplotlib.pyplot进行绘图还比较陌生,我想知道如何修改节点轮廓的颜色(或其他属性,如权重)。“轮廓”不是指两个节点之间的弧或边;我指的是圆周围的黑色细线,在绘制网络时默认用于表示节点。
例如,当我创建一个只有一个节点的图并显示它时:
from networkx import *
import matplotlib.pyplot as plt
plt.ion()
G = Graph()
G.add_node(1)
draw(G)
我看到一个红色的节点,有一个很薄的黑色轮廓(其中有一个黑色的“1”,这是节点的标签)。如何将轮廓的颜色从黑色改为红色(“FF0000”)或其他颜色?或者,我可以完全抑制大纲的显示吗?
我想一定有一个属性,类似于边色或节点色,我可以设置。但是,我无法通过web搜索、networkx文档或通过查看库示例来找到这样的属性。如果有人能给我指一个合适的属性,我将不胜感激。谢谢!
如果要更改节点轮廓的颜色,可以执行以下操作:
就这样。
ax.collections[0]
是控制节点的PathCollection
对象ax.collections[1]
是一个LineCollection
对象,控制边(如果有)。可以使用给定的集合快速修改许多其他属性。
自NetworkX 2.1以来,有一个} (以及^{} ,因为它最终调用
edgecolors
参数添加到^{draw_networkx_nodes()
来绘制节点)。更新(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()
接受的关键字参数没有传递给scatter()
。(source here)为了解决这个问题,我基本上把
networkx.draw()
分解成它的组成部分:draw_networkx_nodes
,draw_networkx_edges
,和draw_networkx_labels
。解决方案
我们可以获取
draw_networkx_nodes()
——aPathCollection
的返回值并对其进行操作:您可以分别对颜色或列表使用PathCollection.set_edgecolor()
或PathCollection.set_edgecolors()
。示例代码:
如果您要经常使用它,那么(IMO)重新定义
draw_networkx_nodes
以实际将kwargs传递给scatter
可能更有意义。但上面的会起作用。要完全删除标记边缘,只需将颜色设置为
None
,而不是'r'
。相关问题 更多 >
编程相关推荐