来自 pandas 数据帧的有向加权图

2024-06-23

我有一个 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. See here http://graphviz.readthedocs.io/en/stable/manual.html了解详情。

这是通过生成的简单图表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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自 pandas 数据帧的有向加权图 的相关文章

随机推荐