Python中的Sankey图

15 投票
5 回答
11545 浏览
提问于 2025-04-15 15:21

有没有一个Python库可以用来生成桑基图

我看到过这个桑基图应用和库的列表,但是里面没有一个是用Python写的。

5 个回答

2

我在谷歌上搜索了“Python 图形可视化”,找到了些东西。有几个库可以让图形看起来更美观,它们会自动调整图形的布局,帮你完成很多工作。不过,它们画出来的图是节点和边的样子,跟桑基图完全不一样。

我搜索“Python sankey”,结果没有找到什么有用的信息。

我又搜索了“Python 矢量图形”,发现了一个很有前景的结果:

http://pypi.python.org/pypi/Things

使用这个工具,似乎可以在 Inkscape(一个免费的矢量图编辑软件)中绘制基本形状,然后用 Python 代码来缩放、旋转这些形状,制作出图像或动画。应该可以写 Python 代码,让桑基图的箭头自动从源头弹出,向上、向下,或者其他方向。

你还可以看看 StackOverflow 上关于用 Python 绘制矢量图的讨论:svg diagrams using python

那个页面让我找到了这个网站:http://cairographics.org/,看起来非常有用。

你链接的博客里有一篇关于自动生成桑基图的文章:

http://www.sankey-diagrams.com/sankey-diagrams-are-directed-weighted-graphs/

http://www.svgopen.org/2003/papers/RenderingGraphs/index.html

我没有找到现成的解决方案,但找到了一些可能有用的部分。祝你好运。

3

你可以使用 Plotly Dash 中的桑基图。

下面是一个简单的示例,改编自上面的链接:

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
    node = dict(
      pad = 15,
      thickness = 20,
      line = dict(color = "black", width = 0.5),
      label = ["A1", "A2", "B1", "B2", "C1", "C2"],
      color = "green"
    ),
    link = dict(
      source = [0, 1, 0, 2, 3, 3], # indices correspond to labels, eg A1, A2, A1, B1, ...
      target = [2, 3, 3, 4, 4, 5],
      value = [7, 5, 3, 9, 5, 3]
  ))])

fig.update_layout(title_text="Simple Sankey Diagram using plotly in Python.", font_size=10)
fig.show()
10

看起来,matplotlib 1.1 现在可以做到这一点。这里有代码和示例输出

下面是一个截图,展示了它能做的事情。

在这里输入图片描述

撰写回答