use*_*516 16 python attributes matplotlib nodes networkx
我相对较新的networkx和使用matplotlib.pyplot进行绘图,并想知道如何修改节点轮廓的颜色(或其他属性,如重量)."轮廓"我不是指两个节点之间的弧或边; 我指的是圆圈周围的细黑线,默认用于在绘制网络时表示节点.
例如,当我创建一个只有一个节点的图形并显示它时:
from networkx import *
import matplotlib.pyplot as plt
plt.ion()
G = Graph()
G.add_node(1)
draw(G)
Run Code Online (Sandbox Code Playgroud)
我看到一个红色的节点,黑色轮廓很薄(里面有一个黑色的"1",这是节点的标签).如何将轮廓的颜色从黑色更改为红色("#FF0000")或其他颜色?或者,我可以完全抑制轮廓的显示吗?
我想象必须有一个属性,类似于edge_color或node_color,我可以设置.但是,我无法通过网络搜索,networkx文档或查看图库示例找到此类属性.如果有人可以指出我将非常感谢的适当属性.谢谢!
sur*_*eak 20
好吧,这有点hacky,但它确实有效.这就是我想出来的.
问题
draw()调用draw(),然后调用edge_color绘制节点.问题是接受的关键字args networkx.draw()没有传递给networkx.draw_networkx_nodes().(来源)
为了解决这个问题,我基本上解体pyplot.scatter()成它的组分:draw_networkx_nodes(),scatter(),和networkx.draw().
解决方案
我们可以获取draw_networkx_nodes- a draw_networkx_edges- 的返回值并对其进行操作:您可以分别使用draw_networkx_labels或draw_networkx_nodes()使用颜色或列表.
示例代码:
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()
Run Code Online (Sandbox Code Playgroud)
如果你将要使用它很多,那么重新定义PathCollection实际传递kwargs 可能更有意义(IMO)PathCollection.set_edgecolor().但上述情况会奏效.
要完全删除标记边缘,只需将颜色设置为PathCollection.set_edgecolors()而不是draw_networkx_nodes.
如果要更改节点轮廓的颜色,可以执行以下操作:
draw(G, linewidths=2)
ax = plt.gca() # to get the current axis
ax.collections[0].set_edgecolor("#FF0000")
Run Code Online (Sandbox Code Playgroud)
就是这样.
ax.collections[0]是PathCollection管理节点的对象ax.collections[1]是一个LineCollection控制边缘的对象,如果你有一些.您可以使用给定集合快速修改许多其他属性.
| 归档时间: |
|
| 查看次数: |
7491 次 |
| 最近记录: |