如何使用CSV文件数据创建图表?

Gra*_*y M 2 python csv graph networkx

我在CSV文件中有以下数据,

A,B,50
A,C,34
C,D,55
D,D,80
A,D,90
B,D,78
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个图形,其中A,B,C,D作为节点,第三列编号作为边.我正在使用networkx库.第三列编号显示A,B和A,C等共享的公共项.

我打开并阅读csv文件.

Graphs = nx.Graph()

for row in openedfile:
 Graphs.add_node(row[0])
 Graphs.add_edge(row[2])

nx.draw_graphviz(Graphs)
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我一个错误.我无法得到正确的答案.

mdm*_*dml 5

我不确定我是否理解文件的格式,因为前两列似乎告诉您应该通过边连接的节点,第三列是该边的权重.

假设是这种情况,将边缘的CSV文件加载到NetworkX的更简单方法是使用该networkx.read_edgelist函数.这是图表的示例(假设它存储在一个名为的文件中"edges.txt"):

In [1]: import networkx as nx
In [2]: G = nx.read_edgelist("edges.txt", delimiter=",", data=[("weight", int)]) 
In [3]: G.edges(data=True)
Out[1]: 
[(u'A', u'C', {'weight': 34}),
 (u'A', u'B', {'weight': 50}),
 (u'A', u'D', {'weight': 90}),
 (u'C', u'D', {'weight': 55}),
 (u'B', u'D', {'weight': 78}),
 (u'D', u'D', {'weight': 80})]
Run Code Online (Sandbox Code Playgroud)

需要注意的重要参数是,您需要将每行的分隔符设置为逗号(","),并且需要指定存储在第三列中的数据是应使用密钥存储的整数"weight".

然后,您可以使用权重作为边标签绘制图形,如下所示:

In [4]: edge_labels = dict( ((u, v), d["weight"]) for u, v, d in G.edges(data=True) )
In [5]: pos = nx.random_layout(G)
In [6]: nx.draw(G, pos)
In [7]: nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
In [8]: import matplotlib.pyplot as plt; plt.show()
Run Code Online (Sandbox Code Playgroud)

http://f.cl.ly/items/2F1t1I3D2i0R2X2E150N/graph.png