我正在使用 networkx 和 matplotlib
现在我想设置节点的颜色,我从文本文件中读取图表
G=nx.read_edgelist("Edge.txt")
nx.draw(G)
plt.show()
以下是示例
的Edge文件0 1
0 2
3 4
这是我做的,但失败了
import networkx as nx
import matplotlib.pyplot as plt
G = nx.read_edgelist("Edge.txt")
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,node_list=[0,1,2],node_color='B')
nx.draw_networkx_nodes(G,pos,node_list=[3,4],node_color='R')
plt.show()
结果是很多没有边缘的蓝色节点
所以如果我想将NodeListA = [0,1,2]设置为蓝色,NodeListB = [3,4]为红色
我该怎么做?
答案 0 :(得分:1)
通过调用顶级函数 draw_networkx_nodes
显式绘制节点并传入您的节点列表作为参数 node_list 的值,并传递参数 node_color 的值,如此
nx.draw_network_nodes(G, pos, node_list=NodeListA, node_color="#5072A7")
参数pos只是一个python字典,其键是图的节点,值是x,y位置;一个易于提供的pos是将你的图形对象传递给 spring_layout ,它将返回字典。
pos = nx.spring_layout(G)
或者,您可以直接传入字典,例如
pos = {
0:(2,2),
1:(3,5),
2:(1,2),
3:(5,5),
4:(7,4)
}
执行OP中代码的可能原因是调用read_edgelist;特别是,传入的文件可能格式不正确。
以下是如何检查以及如何解决此问题:
G = nx.path_graph(5)
df = "/path/to/my/graphinit.edgelist"
nx.write_edgelist(G, df) # save a properly formatted edgelist file
G = nx.read_edgelist(df) # read that file back in