桑基图绘制

绘制桑基图

但是关于数据流上的数据标签可能还得用ps…

注意

1、节点(nodes)要包括各层的,且不能重复,需要自己在后边append几个数据
2、数据流的数据要是整数,不能时numpy
3、注意表格加入时要再由array转为list(说白了还是基础不扎实,导致花很多时间调整)

资料参考

♥※第三方可视化数据分析图表Pyecharts(下载保存图片(生成的html图片)、zip函数(将数据转换为列表加元组的格式)、南丁格尔玫瑰图、双y轴可视化、饼形图和环形图):关于pyechart的设置恨恨恨详细!!!

  1. jupyter lab下用pyecharts生成桑基图显示空白
  2. pyechart数据可视化丨制作桑基图(sankey)的最简单方法
    python数据可视化Pyecharts库sankey修改桑葚图颜色
    python绘制桑基图(sankey diagram)

数据

在这里插入图片描述

代码

import os
from pyecharts import options as opts
from pyecharts.charts import Sankey
import pandas as pd
import numpy as np
import json
#事先把数据存好了格式为  研究期初、研究期末、数据
data1 = pd.read_excel(r'E:\...移矩阵 - 副本.xlsx',encoding = "gbk", index_col = "研究期初")
data2 = pd.DataFrame()
data2["研究期初"] = data1.index
data2["研究期末"] = list(data1["研究期末"].values)
data2["面积"] = data1["面积"].values


# 生成nodes
nodes2 = []
# 先导入部分节点
for i in data2["研究期初"].unique():    
    dic = {}    
    dic['name'] = i    
    nodes2.append(dic)
nodes2.append({'name':'2021年水体'})
nodes2.append({'name':'2021年沙洲'})
nodes2.append({'name':'2021年边滩'})
links2 = []
# 组成字典
for i in data2.values:    
    dic = {}    
    dic['source'] = i[0]    
    dic['target'] = i[1]    
    dic['value'] = int(i[2])
    links2.append(dic)   
#绘制图片
c = (
    Sankey(init_opts=opts.InitOpts(width="1200px", height="800px",theme='westeros'))
    .add(
        "",
        nodes=nodes2,  # 结点
        links=links2,  # 联系
        linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="闽清闽侯段"))
    .render(r"E:\b-研究生学习\5-课题组\1-2022 闽江\3-数据资料\data_area\ABC.html")
)

结果

在这里插入图片描述

设置图片颜色和字体大小

图片颜色

for i in data2["研究期初"].unique():    
    dic = {}    
    dic['name'] = i    
    if i.split("年")[1] == "水体":
        dic['itemStyle']={'color':"#00BFFF"}
    elif i.split("年")[1] == "沙洲":
        dic['itemStyle']={'color':"#FFA500"}    
    else:
        dic['itemStyle']={'color':"#FFFF00"}
    nodes2.append(dic)
nodes2.append({'name':'2021年水体','itemStyle':{'color':"#00BFFF"}})
nodes2.append({'name':'2021年沙洲','itemStyle':{'color':"#FFA500"}})
nodes2.append({'name':'2021年边滩','itemStyle':{'color':"#FFFF00"}})

字体大小

   label_opts=opts.LabelOpts(position="right",font_size=(20)),)

添加工具箱,用来下载图片

pic = (
    Sankey(init_opts=opts.InitOpts(width='700px',height='400px',  # 设置画布大小                        
                                bg_color='#fff'))  #设置画布底色,保证打印下来图片正常
    .add("",
          nodes2,
          links2,
          linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source",type_="dotted"),
          node_gap=50,
          label_opts=opts.LabelOpts(position="right",font_size=(17)),)
    #.set_global_opts(title_opts=opts.TitleOpts("闽清闽侯段"))
   
    )

结果2

请添加图片描述
请添加图片描述
最后代码:

# -*- coding: utf-8 -*-
"""
Created on Thu Mar  2 10:30:34 2023
1、绘制桑基图
2、保存出图
@author: hp
"""
import os
from pyecharts import options as opts
from pyecharts.charts import Sankey
import pandas as pd
import numpy as np
import json

data1 = pd.read_excel(r'E:\b-研究生学习\5-课题组\1-2022 闽江\3-数据资料\data_area\闽清闽侯段转移矩阵 - 副本.xlsx',encoding = "gbk", index_col = "研究期初")
data2 = pd.DataFrame()
data2["研究期初"] = data1.index
data2["研究期末"] = list(data1["研究期末"].values)
data2["面积"] = data1["面积"].values
# 生成nodes
nodes2 = []
# 添加其他节点
for i in data2["研究期初"].unique():    
    dic = {}    
    dic['name'] = i    
    if i.split("年")[1] == "水体":
        dic['itemStyle']={'color':"#00BFFF"}
    elif i.split("年")[1] == "沙洲":
        dic['itemStyle']={'color':"#FFA500"}    
    else:
        dic['itemStyle']={'color':"#FFFF00"}
    nodes2.append(dic)
nodes2.append({'name':'2021年水体','itemStyle':{'color':"#00BFFF"}})
nodes2.append({'name':'2021年沙洲','itemStyle':{'color':"#FFA500"}})
nodes2.append({'name':'2021年边滩','itemStyle':{'color':"#FFFF00"}})
links2 = []
for i in data2.values:    
    dic = {}    
    dic['source'] = i[0]    
    dic['target'] = i[1]    
    dic['value'] = int(i[2])
    links2.append(dic)   

# c = (
#     Sankey(init_opts=opts.InitOpts(width="1200px", height="800px",theme='westeros'))
#     .add(
#         "",
#         nodes=nodes2,  # 结点
#         links=links2,  # 联系
#         linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
#         label_opts=opts.LabelOpts(position="right"),
#     )
#     .set_global_opts(title_opts=opts.TitleOpts(title="闽清闽侯段"))
#     .render(r"E:\b-研究生学习\5-课题组\1-2022 闽江\3-数据资料\data_area\ABC.html")
# )
pic = (
    Sankey(init_opts=opts.InitOpts(width='700px',height='400px',  # 设置画布大小                        
                                bg_color='#fff'))  #设置画布底色,保证打印下来图片正常
    .add("",
          nodes2,
          links2,
          linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source",type_="dotted"),
          node_gap=50,
          label_opts=opts.LabelOpts(position="right",font_size=(17)),)
    #.set_global_opts(title_opts=opts.TitleOpts("闽清闽侯段"))
   
    )
pic.set_global_opts(toolbox_opts=opts.ToolboxOpts(is_show=True,pos_left=500))   # 工具箱离容器左侧的距离   
pic.render('problem.html')
os.system('problem.html')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

美滋滋(你猜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值