Python网络在使用draw_network_nodes()时更改节点的颜色

Python网络在使用draw_network_nodes()时更改节点的颜色,python,matplotlib,networkx,Python,Matplotlib,Networkx,目标是获得类似于 要定义我使用的图形,请执行以下操作: import matplotlib.pyplot as plt import networkx as nx graph = { '1': ['2', '3', '4'], '2': ['5','11','12','13','14','15'], '3' : ['6','7','66','77'], '5': ['6', '8','66','77'], '4': ['7','66','77'],

目标是获得类似于

要定义我使用的图形,请执行以下操作:

import matplotlib.pyplot as plt
import networkx as nx
graph = {
    '1': ['2', '3', '4'],
    '2': ['5','11','12','13','14','15'],
    '3' : ['6','7','66','77'],
    '5': ['6', '8','66','77'],
    '4': ['7','66','77'],
    '7': ['9', '10']
    } 

MG = nx.DiGraph()
MG.add_edges_from([(start, stop, {'weigth' :  len(graph[start]) }) 
     for start in graph for stop in graph[start]])
绘制它的代码是:

plt.figure(figsize=(8,8))
pos=nx.graphviz_layout(MG,prog="twopi",root='1')
for n in MG.nodes_iter():
    nx.draw_networkx_nodes(MG, pos,
        nodelist = [n],
        node_size = 2000 / float(len(MG[n[0]])+1),
        node_color = (len(MG[n[0]])+1),
        alpha = 1/float(len(MG[n[0]])+1),
        with_labels=True
                       )
xmax=1.1*max(xx for xx,yy in pos.values())
ymax=1.1*max(yy for xx,yy in pos.values())
plt.xlim(0,xmax)
plt.ylim(0,ymax)
plt.show()
这里有两件事我想知道:

  • 根据每个节点的链接数量(即
    len(MG[0])
    ),如何拥有颜色节点

  • 我的标签在哪里


谢谢

这个怎么样?可以使用matplotlib的颜色贴图将值映射到节点的颜色

import matplotlib.pyplot as plt
import networkx as nx
graph = {
    '1': ['2', '3', '4'],
    '2': ['5','11','12','13','14','15'],
    '3' : ['6','7','66','77'],
    '5': ['6', '8','66','77'],
    '4': ['7','66','77'],
    '7': ['9', '10']
    }

MG = nx.DiGraph(graph)


plt.figure(figsize=(8,8))
pos=nx.graphviz_layout(MG,prog="twopi",root='1')

nodes = MG.nodes()
degree = MG.degree()
color = [degree[n] for n in nodes]
size = [2000 / (degree[n]+1.0) for n in nodes]

nx.draw(MG, pos, nodelist=nodes, node_color=color, node_size=size,
        with_labels=True, cmap=plt.cm.Blues, arrows=False)
plt.show()

这几乎是完美的:)我想用不同的alpha设置每个节点,这就是为什么我要循环节点,而不是将它们全部绘制在一起