matplotlib:legend不从networkx图继承node_color

时间:2015-06-11 23:55:46

标签: python matplotlib networkx

我在Windows 7上使用Python 2.7运行matplotlib v1.4.3。当我使用networkx生成图形时,传递通过node_color参数的节点颜色不会被图例继承。图例的圆圈是默认的蓝色。以下代码是一个显示问题的测试用例。我是SO的新用户,无法发布图片,但您可以复制/粘贴代码以查看问题。

gaussian_array

1 个答案:

答案 0 :(得分:1)

这是一个有效的版本。

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

# define nodes, node types, and color range
np.random.seed(10000)
nodes = list('abcdefghijkl')
nodeTypes = ['foo','bar','baz']
nodeColors = ['r', 'b', 'k']

# assign each node a type and color via a dictionaries
nodeTypeDict = dict(zip(nodeTypes, [nodes[:4],nodes[4:8],nodes[8:]]))
nodeColorDict = dict(zip(nodeTypes, nodeColors))
nodePos = dict(zip(nodes,[(np.random.random(),np.random.random()) 
                                        for i in range(len(nodes))]))

# generate the graph
g = nx.Graph()
g.add_nodes_from(nodes)

# create image canvas and axes
fig, ax = plt.subplots(1, figsize=(6,6))

# iterate each nodetype, changing colors and labels of the nodes
for nt in nodeTypes:
    # choose nodes and color for each iteration
    nlist = nodeTypeDict[nt]
    ncolor = nodeColorDict[nt]
    print ncolor
    # draw the graph
    nx.draw_networkx_nodes(g, 
                           pos=nodePos,
                           nodelist=nlist,
                           ax=ax, 
                           node_color=ncolor,
                           label=nt)  # the label for each iteration is 
                                      # the node type

# here is the problem.  The legend does not inherit the colors.
ax.legend(scatterpoints=1)
plt.savefig('tmp.png')

enter image description here

我以为我快速解释了什么是错的,但我不是。首先 - 如果您为特定命令设置所有颜色相同,则无需向draw_networkx_nodes发送颜色列表。只需将其更改为单一颜色即可。我认为这会解决它,但后来我遇到了麻烦的cmap。然后我明确说明了要使用的颜色,问题是固定的。

所以 - 我有什么作品,而且它似乎是在绘制图例时它没有得到颜色贴图编码的正确颜色。我建议在调用draw_networkx_nodes之前确定颜色,然后只发送颜色。