Python中的Sankey图
有没有一个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