🌵题目:python桑基图制作
🌴欢迎点赞评论学习交流~
🌱各位看官多多关注哦😘~
?
目录
桑基图
基础数据
获取节点信息
定义边和流量
画图
全部代码
图例
桑基图
桑基图百度条词
桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机的能源效率图”而闻名,此后便以其名字命名为“桑基图”
基础数据
读取数据,一般数据都是保存excel文档
纹饰?? ?类型?? ?数量 A?? ?铅钡?? ?16 A?? ?高钾?? ?6 B?? ?铅钡?? ?0 B?? ?高钾?? ?6 C?? ?铅钡?? ?24 C?? ?高钾?? ?6?
这个数据来源是2022全国数学建模比赛C题中的部分数据。
import pandas as pd
df=pd.DataFrame({
'纹饰':['A','A','B','B','C','C'],
'类型':['铅钡','高钾','铅钡','高钾','铅钡','高钾'],
'数量':[16,6,0,6,24,6]
})
print(df)
?自拟定生成数据。
获取节点信息
nodes=[]
list_index = [0,1]
for i in list_index:
vales=df.iloc[:,i].unique()
print(vales)
for value in vales:
dic={}
dic['name']=value
nodes.append(dic)
定义边和流量
linkes=[]
for i in df1.values:
dic={}
dic['source']=i[0]
dic['target']=i[1]
dic['value']=i[2]
if dic['value'] == 0:
pass
else:
linkes.append(dic)
print(linkes)
画图
pic=(
Sankey().add(
'',#图例名称
nodes,#传入节点数据
# linkes,#传入边和流量数据
linkes,
#设置透明度、弯曲度、颜色
linestyle_opt=opts.LineStyleOpts(opacity=0.3,curve=0.5,color='source'),
#标签显示位置
label_opts=opts.LabelOpts(position='right'),
#节点之间的距离
node_gap=30,
)
.set_global_opts(title_opts=opts.TitleOpts(title='文物分类图'))
)
pic.render('test1.html')
全部代码
import pandas as pd
from pyecharts.charts import Sankey
from pyecharts import options as opts
#读取xls数据
df = pd.read_excel(r'自己的excel文件路径')
#自拟定数据
#df=pd.DataFrame({
#'纹饰':['A','A','B','B','C','C'],
#'类型':['铅钡','高钾','铅钡','高钾','铅钡','高钾'],
#'数量':[16,6,0,6,24,6]
#})
#获取节点信息
nodes=[]
list_index = [2,4]
for i in list_index:
vales=df.iloc[:,i].unique()
print(vales)
for value in vales:
dic={}
dic['name']=value
nodes.append(dic)
#定义边和流量
linkes=[]
for i in df1.values:
dic={}
dic['source']=i[0]
dic['target']=i[1]
dic['value']=i[2]
if dic['value'] == 0:
pass
else:
linkes.append(dic)
print(linkes)
#画桑基图
pic=(
Sankey().add(
'',#图例名称
nodes,#传入节点数据
# linkes,#传入边和流量数据
linkes,
#设置透明度、弯曲度、颜色
linestyle_opt=opts.LineStyleOpts(opacity=0.3,curve=0.5,color='source'),
#标签显示位置
label_opts=opts.LabelOpts(position='right'),
#节点之间的距离
node_gap=30,
)
.set_global_opts(title_opts=opts.TitleOpts(title='文物分类图'))
)
pic.render('test.html')
图例
?本文借鉴文章?Python图形系列之桑基图_创意李公馆的博客-CSDN博客_python 桑基图
|