这张图是不是十分的漂亮呢?今天偶然间看到一张十分炫酷的图,深深地被它妖艳炫酷的的外表所迷惑,查了许多资料之后,得知它叫“桑基图”。古人云:“桑吉桑吉,高贵美丽”,果然美丽啊,本人业余时间利用Python绘制了一个具体的实例。
1.桑基图的概念
桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机的能源效率图”而闻名,此后便以其名字命名为“桑基图”。
2.基本特征
桑基图最明显的特征就是,始末端的分支宽度总和相等,即所有主支宽度的总和应与所有分出去的分支宽度的总和相等,保持能量的平衡。
3.制作工具以及数据准备
本文主要采用Python中的pandas库和 pyecharts库来作最基本的桑基图,数据的准备如下图所示:
4.代码
这里不再啰嗦,直接贴代码
import pandas as pd
from pyecharts.charts import Page,Sankey
from pyecharts import options as opts
# 读取csv文件
data = pd.read_csv(r'/home/apollo/Desktop/sample.csv',encoding = 'utf-8',header=None)
# print(data)
# 生成nodes = =[]
nodes = []
nodes.append({'name':'总支出'})
for i in data[0].unique():
dic = {}
dic['name'] = i
nodes.append(dic)
# 生成links
links = []
for i in data.values:
dic = {}
dic['source'] = i[0]
dic['target'] = i[1]
dic['value'] = i[2]
links.append(dic)
# 生成可视化结果
c = (
Sankey()
.add(
"费用/元",
nodes,
links,
linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source",type_="dotted"),
label_opts=opts.LabelOpts(position="right",),
)
.set_global_opts(title_opts=opts.TitleOpts(title="2019年生活支出一览"))
)
# 输出html可视化结果
c.render('result.html')
最后生成HTML格式的文件,用浏览器打开即可
5.结果展示
喜欢的朋友麻烦一键三连哦,有不当之处请随时打扰,有扰必回。