我有以下代码
#!/usr/bin/python
import sys
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph();
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_edge('A','B',weight=1)
G.add_edge('C','B',weight=1)
G.add_edge('B','D',weight=30)
colors=range(20)
nx.draw_spring(G,font_size=20,width=2,node_size=1000,node_color='#A0CBE2')
plt.savefig("/Users/handsomeguy/Desktop/test.png",dpi=300)
生成以下图表(当然没有评论):
如上图所示。我想更改节点C
和D
的颜色,并扩大其大小
这些选定的节点。我怎样才能做到这一点?
请注意,C和D是我的预定节点。
答案 0 :(得分:3)
当您使用小图表时,更改单个节点样式的一种简单方法是传递networkx.draw_spring
大小/颜色列表的参数(例如node_size
或node_color
)。诀窍是,如果使用列表,列表必须包含每个节点的大小/颜色 ,列表必须与G.nodes()
的顺序相同(因此为什么我sort
以下示例中的节点:
nx.draw_spring(G, nodelist=sorted(G.nodes()), font_size=20, width=2,
node_size=[1000, 1000, 2000, 3000],
node_color=["#A0CBE2", "#A0CBE2", "#FF0000", "#FFFF00"])
结果如下:
另一个选择是首先存储图形的节点/边的布局,然后使用networkx.draw_networkx
。当您拥有一个大图并且只想更改几个节点的样式时,这可能更有用。在这里,我首先在pos
中存储图形的弹簧布局,然后传递pos
以绘制每个节点及其边缘:
pos = nx.spring_layout(G)
nx.draw_networkx(G, pos=pos, nodelist=["A", "B"], node_size=1000, node_color='#A0CBE2', font_size=20, width=2)
nx.draw_networkx(G, pos=pos, nodelist=["C"], node_size=2000, node_color='#FF0000', font_size=20, width=2,)
nx.draw_networkx(G, pos=pos, nodelist=["D"], node_size=3000, node_color='#FFFF00', font_size=20, width=2)
注意:要关闭networkx.draw_networkx
图中的轴,请在plt.show()
之前添加以下命令:
limits=plt.axis('off')