首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从数据帧生成网络图

从数据帧生成网络图
EN

Stack Overflow用户
提问于 2020-11-24 13:33:43
回答 2查看 119关注 0票数 1

假设我有这样一个数据帧,其中列a-number表示到b-number中节点的有向边的节点

代码语言:javascript
运行
复制
    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

如何生成此图的图像表示形式,如下所示:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-24 13:46:51

Networkx是python中的图形库:https://networkx.org/documentation/stable/index.html

首先进行导入:

代码语言:javascript
运行
复制
import networkx as nx

要启动一个声明初始化DiGraph (有向图)的图:

代码语言:javascript
运行
复制
G = nx.DiGraph()

然后添加一些节点:

代码语言:javascript
运行
复制
G.add_node(343)
G.add_node(991)
G.add_node(633)

然后是一些边:

代码语言:javascript
运行
复制
G.add_edge(343,991)
G.add_edge(991,633)
G.add_edge(343,633)

最后画出图G:

代码语言:javascript
运行
复制
nx.draw(G, with_labels = True, font_size=14 , node_size=2000)

使用with_labels = True以获得节点编号,使用node_size=2000使节点变大,使用font_size=14使字体变大

这是代码的输出:

现在,要从数据帧中读取数据,只需执行如下循环:

代码语言:javascript
运行
复制
for  i, (x, y) in df.iterrows():
    G.add_node(x)
    G.add_node(y)
    G.add_edge(x,y)

如果结点或边已经存在,则不会添加新的结点或边,因此无需担心

票数 1
EN

Stack Overflow用户

发布于 2020-11-24 13:44:22

您还可以使用graphviz库:

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64980775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档