directed weighted graph from pandas dataframe(来自 pandas 数据帧的有向加权图)
本文介绍了来自 pandas 数据帧的有向加权图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个 pandas 数据帧(假设为df),它有三列:
src dst weight
a b 2
c d 7
b a 5
d c 1
d a 3
a a 4
b b 1
我想创建一个有向加权图。我尝试了以下方法,但无法将权重添加到可视化效果中。
G = nx.from_pandas_dataframe(df,source='src', target='dst', edge_attr=['weight'], create_using=nx.DiGraph())
nx.draw_circular(G, with_labels=True)
plt.show()
有什么建议如何使边缘的权重可视化吗?此外,我有兴趣查看两个节点之间的双向权重(如果存在双向连接)。我也有兴趣可视化那些以一定权重连接到自己的节点。例如,在示例数据中,节点‘a’连接到权重为4的节点‘a’,您如何将其视为闭合连接或环连接?我正在使用Networkx库。
推荐答案
graphviz
具有以各种格式呈现复杂图形的各种功能,甚至networkx
也有graphviz
的插件。详情请参见here。
这里是使用您的数据通过graphviz
生成的简单图表。您可以添加许多花哨,如节点,边缘颜色,字体等。
您也可以直接保存为特定的文件格式,包括pdf。
from graphviz import Digraph
import pandas as pd
G = Digraph(format='jpeg')
G.attr(rankdir='LR', size='8,5')
G.attr('node', shape='circle')
df = pd.read_csv('data.txt', sep=",", engine='python')
nodelist = []
for idx, row in df.iterrows():
node1, node2, weight = [str(i) for i in row]
if node1 not in nodelist:
G.node(node1)
nodelist.append(node2)
if node2 not in nodelist:
G.node(node2)
nodelist.append(node2)
G.edge(node1,node2, label = weight)
G.render('sg', view=True)
这篇关于来自 pandas 数据帧的有向加权图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:来自 pandas 数据帧的有向加权图


猜你喜欢
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- python-m http.server 443--使用SSL? 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- 沿轴计算直方图 2022-01-01