使用pandas导入了以下矩阵。
name1 name2 name3
name1 0 1 0
name2 1 0 1
name3 0 0 1
该图表将节点显示为数字1, 2, 3
。但是,我希望节点为name1, name2, name3
请参阅我正在使用的代码:
import pandas as pd
import networkx as nx
datamuse = pd.read_csv('NetworkDatasheet.csv',index_col=0)
print(datamuse)
G = nx.DiGraph(datamuse.values)
nx.draw_random(G, with_labels=True)
答案 0 :(得分:1)
这是一个有效的解决方案。为了摆脱Dataframe,我将标签直接包含在Graph属性中。
import pandas as pd
import networkx as nx
df = pd.DataFrame([[0, 1, 0], [1, 0, 1], [0, 0, 1]],
index=['name1', 'name2', 'name3'],
columns=['name1', 'name2', 'name3'])
# You code works, here it's more explicit
G = nx.from_numpy_matrix(df.values, create_using=nx.DiGraph())
# Set labels in each node under the key 'label', create a dict{0: 'name1', ...}
nx.set_node_attributes(G, 'label', dict(zip(xrange(len(df)), df.index.values)))
# Draw the network and specify the labels
nx.draw_random(G, with_labels=True, labels=nx.get_node_attributes(G, 'label'))