Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用CSV文件数据创建图形?_Python_Csv_Graph_Networkx - Fatal编程技术网

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

Python 如何使用CSV文件数据创建图形?,python,csv,graph,networkx,Python,Csv,Graph,Networkx,我在CSV文件中有以下数据 A,B,50 A,C,34 C,D,55 D,D,80 A,D,90 B,D,78 现在我想创建一个图,其中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

我在CSV文件中有以下数据

A,B,50
A,C,34
C,D,55
D,D,80
A,D,90
B,D,78
现在我想创建一个图,其中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)

上面的代码给了我一个错误。我不能得到正确的答案

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

假设是这种情况,将边的CSV文件加载到NetworkX的一种更简单的方法是使用函数。下面是一个图形示例(假设它存储在名为
“edges.txt”
)的文件中):

需要注意的重要参数是,您需要将每行的分隔符设置为逗号(
,“
),并且需要指定存储在第三列中的数据是一个整数,应该使用键
“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()

会绘制图形并显示吗?@GravityM:对不起,我不明白你的问题。我刚刚添加了图形的图像,一旦它被绘制(所以给我上传它带来了麻烦)。我可以使用for循环来循环我的整个文件吗?你能再核对一下这个问题吗?我添加了你的代码和我正在尝试做的。但我认为你的解决方案会奏效。但是有一个快速的问题(在问题中更新)@GravityM:是的,你可以在文件中循环,你只需要做
G.add_edge(row[0],row[1],weight=int(row[2]))
在你的
for
循环的主体中。我使用的是csv文件。并使用openedfile=csv.reader打开文件(文件路径,分隔符=',')
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()