我用 networkx 和 draw_circular 绘制图形
networkx.draw_circular(g)
我尝试改变一些节点的颜色,也许用draw_networkx_nodes。
但是为此,我需要知道节点位置,如何在 draw_circular 中获取节点的位置?
或者直接,如何更改draw_circular中某些节点的颜色?
我用 networkx 和 draw_circular 绘制图形
networkx.draw_circular(g)
我尝试改变一些节点的颜色,也许用draw_networkx_nodes。
但是为此,我需要知道节点位置,如何在 draw_circular 中获取节点的位置?
或者直接,如何更改draw_circular中某些节点的颜色?
draw_circular
将接受与 . 相同的关键字参数draw_networkx
。有一个可选参数node_color
,您可以在其中为各个节点提供颜色。传递给的参数node_color
必须是长度为节点数的列表或将用于所有节点的单个值。颜色可以是matplotlib识别的任何颜色。
所以这样的事情会给出以下结果:
import networkx as nx
import matplotlib.pyplot as plt
from random import random
g = nx.random_graphs.erdos_renyi_graph(10,0.5)
colors = [(random(), random(), random()) for _i in range(10)]
nx.draw_circular(g, node_color=colors)
plt.show()
编辑
Optinoally,您可以使用 等获取特定布局的节点位置networkx.layout.circular_layout
。
只是为了添加到上一个答案(Avaris),使用“networkx.draw_networkx_nodes()”的“ nodelist ”属性也可能很有用。
import matplotlib.pyplot as plt
import networkx as nx
nodes = [0,1,2,3]
edges = [(0,1), (1,2), (3,1), (2,3)]
nodeListA = [0,1]
nodeListB = [2,3]
G = nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
position = nx.circular_layout(G)
nx.draw_networkx_nodes(G,position, nodelist=nodeListA, node_color="b")
nx.draw_networkx_nodes(G,position, nodelist=nodeListB, node_color="r")
nx.draw_networkx_edges(G,position)
nx.draw_networkx_labels(G,position)
plt.show()
这会生成下图:
您还可以从变量“位置”访问节点的位置。输出看起来像这样:
In [119]: position
Out[119]:
{0: array([ 1. , 0.5], dtype=float32),
1: array([ 0.49999997, 1. ], dtype=float32),
2: array([ 0. , 0.49999997], dtype=float32),
3: array([ 0.5, 0. ], dtype=float32)}