python networkx中的图例

python networkx中的图例,python,legend,networkx,Python,Legend,Networkx,我有以下代码来绘制带有节点的图形,但我无法添加正确的图例: (抱歉,我无法发布图片,因为我的声誉似乎不够) 我想要一个有4种颜色的图例,比如“浅蓝色=过时,红色=草稿,黄色=真实,深蓝色=初始” 我见过一些“分散”的解决方案,但我认为它太复杂了。有没有办法使用plt.legend(G.nodes) 代码如下: import networkx as nx import matplotlib.pyplot as plt import numpy as np G=nx.Graph() G.add_no

我有以下代码来绘制带有节点的图形,但我无法添加正确的图例: (抱歉,我无法发布图片,因为我的声誉似乎不够)

我想要一个有4种颜色的图例,比如“浅蓝色=过时,红色=草稿,黄色=真实,深蓝色=初始”

我见过一些“分散”的解决方案,但我认为它太复杂了。有没有办法使用
plt.legend(G.nodes)

代码如下:

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
G=nx.Graph()
G.add_node("kind1")
G.add_node("kind2")
G.add_node("Obsolete")
G.add_node("Draft")
G.add_node("Release")
G.add_node("Initialisation")
val_map = {'kind1': 2,'kind2': 2,'Obsolete': 2,'Initialisation': 1,'Draft': 4,'Release': 3}
values = [val_map.get(node, 0) for node in G.nodes()]
nodes = nx.draw(G, cmap = plt.get_cmap('jet'), node_color = values)

plt.legend(G.nodes())
plt.show() 

使用
nx.draw
时,似乎出现了某种错误。尝试使用
nx.draw\u networkx
。 然后在绘制图形时使用
matplotlib
中的轴传递它。在(0,0)中绘制点时,此轴应包含节点的标签和颜色-->这是一个棘手的部分

希望有帮助!以下是我运行的代码:

将networkx导入为nx
将matplotlib.pyplot作为plt导入
将numpy作为np导入
#用于颜色映射
将matplotlib.colors导入为颜色
将matplotlib.cm作为cmx导入
G=nx.Graph()
G.add_节点(“kind1”)
G.add_节点(“kind2”)
G.添加节点(“过时”)
G.添加节点(“草稿”)
G.添加节点(“发布”)
G.添加节点(“初始化”)
#你错过了这个职位。
位置=nx.弹簧布置图(G)
val_map={'kind1':2,
“kind2”:2,
"过时":2,,
“初始化”:1,
"草案":4,,
“释放”:3}
values=[G.nodes()中节点的val_map.get(节点,0)]
#颜色映射
jet=cm=plt.get_cmap('jet'))
cNorm=颜色。规格化(vmin=0,vmax=max(值))
scalarMap=cmx.ScalarMappable(norm=cNorm,cmap=jet)
#调用nx.draw\u networkx时使用图形作为参数
f=plt.图(1)
ax=f.add_子批次(1,1,1)
对于val_地图中的标签:
ax.绘图([0],[0],
颜色=比例映射到rgba(值映射[标签]),
标签=标签)
#刚刚修复了彩色地图
nx.绘制网络x(G,pos,cmap=jet,vmin=0,vmax=max(值),
节点颜色=值,
带_标签=False,ax=ax)
#下面是我收到的代码错误
#nodes=nx.draw(G,cmap=plt.get\u cmap('jet'),nodes\u color=value)
#将它设置为以前的样子。
打印轴(“关闭”)
f、 设置面颜色(“w”)
plt.图例(loc='center')
f、 紧凑的布局()
plt.show()
一些有用的资料来源:


  • 非常感谢你的帮助,但这并不是我想要的。我做了一些更改,因此可以使颜色图例的名称与节点的名称不同

    以下是最终代码:

    import networkx as nx
    import matplotlib.pyplot as plt
    import numpy as np
    # For color mapping
    import matplotlib.colors as colors
    import matplotlib.cm as cmx
    
    G=nx.Graph()
    G.add_node("kind1")
    G.add_node("kind2")
    G.add_node("kind3")
    G.add_node("kind4")
    G.add_node("kind5")
    G.add_node("kind6")
    
    # You were missing the position.
    pos=nx.spring_layout(G)
    val_map = {'kind1': 2,'kind2': 2,'kind3': 2,'kind4': 1,'kind5':4,'kind6': 3}
    #I had this list for the name corresponding t the color but different from the node name
    ColorLegend = {'Obsolete': 2,'Initialisation': 1,'Draft': 4,'Release': 3}
    values = [val_map.get(node, 0) for node in G.nodes()]
    # Color mapping
    jet = cm = plt.get_cmap('jet')
    cNorm  = colors.Normalize(vmin=0, vmax=max(values))
    scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet)
    
    # Using a figure to use it as a parameter when calling nx.draw_networkx
    f = plt.figure(1)
    ax = f.add_subplot(1,1,1)
    for label in ColorLegend:
        ax.plot([0],[0],color=scalarMap.to_rgba(ColorLegend[label]),label=label)
    
    # Just fixed the color map
    nx.draw_networkx(G,pos, cmap = jet, vmin=0, vmax= max(values),node_color=values,with_labels=True,ax=ax)
    
    # Setting it to how it was looking before.                                                                                                              
    plt.axis('off')
    f.set_facecolor('w')
    
    plt.legend()
    
    f.tight_layout()
    plt.show()
    

    我还有一个问题。每次我绘图时,节点的位置都会改变。但是我想要一个恒定的节点位置(我不在乎每个节点的位置是什么,我只想如果我画了几次图,节点保持在相同的位置)。“pos=nx.spring_布局(G)”中是否有要添加的参数?我看了,但是我没有看到一个参数可以作为解决方案。谢谢你的帮助!!!当然我想如果你使用圆形布局而不是弹簧布局,你会得到一些常量。您可以在此处查看布局: