从数据框生成网络图
Generate Network plot from dataframe
假设我有这个数据框,其中列 a-number
表示具有指向 b-number
中节点的边的节点:
a_number b_number
0 343 991
1 991 633
2 343 633
3 633 628
4 343 633
5 628 916
6 697 886
7 916 572
8 697 884
9 886 125
如何生成此图的图像表示,如下所示:
您还可以使用 graphviz
库:
from graphviz import Digraph
dot = Digraph()
for i, (a, b) in df.iterrows():
dot.edge(str(a), str(b))
dot.render('graph.gv', view=True)
Networkx 是 python 中图的 go-to 库:
https://networkx.org/documentation/stable/index.html
首先进行导入:
import networkx as nx
要启动这样的图,请声明一个初始化有向图(有向图):
G = nx.DiGraph()
然后添加一些节点:
G.add_node(343)
G.add_node(991)
G.add_node(633)
然后是一些边:
G.add_edge(343,991)
G.add_edge(991,633)
G.add_edge(343,633)
最后画出图G:
nx.draw(G, with_labels = True, font_size=14 , node_size=2000)
使用 with_labels = True 这样你就可以获得节点号,node_size=2000 使节点更大,font_size=14 使字体也更大
这是代码的输出:
现在要从数据框中读取数据,只需执行如下循环:
for i, (x, y) in df.iterrows():
G.add_node(x)
G.add_node(y)
G.add_edge(x,y)
如果节点或边已经存在,它不会添加新的,因此您无需担心
假设我有这个数据框,其中列 a-number
表示具有指向 b-number
中节点的边的节点:
a_number b_number
0 343 991
1 991 633
2 343 633
3 633 628
4 343 633
5 628 916
6 697 886
7 916 572
8 697 884
9 886 125
如何生成此图的图像表示,如下所示:
您还可以使用 graphviz
库:
from graphviz import Digraph
dot = Digraph()
for i, (a, b) in df.iterrows():
dot.edge(str(a), str(b))
dot.render('graph.gv', view=True)
Networkx 是 python 中图的 go-to 库: https://networkx.org/documentation/stable/index.html
首先进行导入:
import networkx as nx
要启动这样的图,请声明一个初始化有向图(有向图):
G = nx.DiGraph()
然后添加一些节点:
G.add_node(343)
G.add_node(991)
G.add_node(633)
然后是一些边:
G.add_edge(343,991)
G.add_edge(991,633)
G.add_edge(343,633)
最后画出图G:
nx.draw(G, with_labels = True, font_size=14 , node_size=2000)
使用 with_labels = True 这样你就可以获得节点号,node_size=2000 使节点更大,font_size=14 使字体也更大
这是代码的输出:
现在要从数据框中读取数据,只需执行如下循环:
for i, (x, y) in df.iterrows():
G.add_node(x)
G.add_node(y)
G.add_edge(x,y)
如果节点或边已经存在,它不会添加新的,因此您无需担心