legend in python networkx
我有以下代码来绘制带有节点的图,但我无法添加适当的图例:
(对不起,我无法发布图片,看来我的信誉不高)
我想要一个具有4种颜色的图例,例如"浅蓝色=已过时,红色=草稿,黄色=重新发布,深蓝色=初始化"。
我已经看到一些关于"分散"的解决方案,但是我认为它太复杂了。有没有办法用
这是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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() |
非常感谢您的帮助,但这并不是我想要的。我进行了很少的更改,因此可以使颜色图例的名称与节点的名称不同。
这是最终代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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() |

使用
然后在绘制图形时使用
希望有帮助!这是我运行的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 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("Obsolete") G.add_node("Draft") G.add_node("Release") G.add_node("Initialisation") # You were missing the position. pos=nx.spring_layout(G) 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()] # 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 val_map: ax.plot([0],[0], color=scalarMap.to_rgba(val_map[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=False, ax=ax) # Here is were I get an error with your code #nodes = nx.draw(G, cmap=plt.get_cmap('jet'), node_color=values) # Setting it to how it was looking before. plt.axis('off') f.set_facecolor('w') plt.legend(loc='center') f.tight_layout() plt.show() |
一些有用的资料来源: