networkx:更改draw_circular中的节点颜色

时间:2011-11-10 16:02:06

标签: python networkx

我用networkx和draw_circular

绘制图表
  networkx.draw_circular(g)

我尝试更改某些节点的颜色,可能是draw_networkx_nodes 但为此,我需要知道节点的位置,我如何获得draw_circular中节点的位置?
或者直接,我如何改变draw_circular中某些节点的颜色?

2 个答案:

答案 0 :(得分:7)

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()

enter image description here

修改

光学上,您可以使用networkx.layout.circular_layout等获取某些布局的节点位置。

答案 1 :(得分:2)

只是添加到上一个答案(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()

这会生成下图:

enter image description here

您还可以从变量“position”访问节点的位置。输出看起来像这样:

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)}