分享

Python实现Sankey Diagram 绘制

 北方的白桦林 2023-09-28 发布于广东

    桑基图(Sankey diagram),即桑基能量分流图(下文简称能流图),也叫桑基能量平衡图。它是一种特定类型的流程图,右图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机的能源效率图”而闻名,此后便以其名字命名为“桑基图”。

    STEP1:本文基于Python实现桑基图的绘制,在绘制之前,请预先安装Python 3.8 及相关必要库。

import pandas as pdfrom pyecharts.charts import Sankeyfrom pyecharts import options as opts #Base on Python 3.8 interpreter

    STEP2:准备你的数据(以国家统计局官方给出的能源数据为例并进行必要单位换算)

    数据格式如下(部分,如需完整数据请私信我):

图片

(上图数据对应下文sankey2030-figure图片)

    Python的 pyecharts 中的Sankey 方法支持输入的数据格式为Node,Source,Target,Value。Node即为桑基图的根节点,可以指定节点深度。Source为首节点,Target尾节点,Value为首尾节点连线上'流量'。

    STEP3:绘制能流图,代码如下:

import pandas as pdfrom pyecharts.charts import Sankeyfrom pyecharts import options as optsdf = pd.read_excel(r'Z:\PHD\Data\Sankey.xlsx')# 创建节点列表# nodes = [{'name': node} for node in df['Node'].unique()]nodes = [{'name': node, 'itemStyle': {'color': color}} for node, color in zip(df['Node'].unique(), ['#ff7473', '#34314c', '#ffc952','#47b8e0','#00dffc','#008c9e','#005f6b','#dae9f4','#f9d423','#E71D36','#2EC4B6','#F68657'])]# 创建连接列表links = [{'source': source, 'target': target, 'value': value} for source, target, value in zip(df['Source'], df['Target'], df['Value'])]# 创建Sankey图sankey = Sankey(init_opts=opts.InitOpts(width='800px', height='600px'))sankey.add(    series_name='Sankey',    nodes=nodes,    links=links,    linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color='source'),    label_opts=opts.LabelOpts(position='right'),)
# 配置全局选项sankey.set_global_opts( title_opts=opts.TitleOpts(title='Sankey Diagram'), datazoom_opts=[opts.DataZoomOpts(type_='slider', range_start=0, range_end=3)], # 控制节点深度)
# 渲染图表sankey.render('sankey2030.html')

     STEP4:绘图结果,绘制了一个节点深度为3的图,并指定节点颜色

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多