欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用pyecharts绘制桑基图---帮助小姐姐

程序员文章站 2022-05-25 21:16:40
...

pyecharts的中文网站,有这个包的详细介绍,需要什么直接去看什么。

绘制桑基图,主要是结点联系

原始数据的示意图:
利用pyecharts绘制桑基图---帮助小姐姐
pyecharts要求都要是json格式,这是一种数据格式,有专门的网站将excel转换成json。比如http://www.yzcopen.com/doc/exceljson
自己也找了个代码:

import codecs

file_name  = '.\\卵巢囊肿手术治疗(腹腔镜).xlsx'
wb = xlrd.open_workbook(file_name)
dict_list = []
node_list = []
sh = wb.sheet_by_index(3)
title = sh.row_values(0)  #  获取表头,即第一行的字段
# print(title)  # ['科室', '项目类型', '金额']

# for循环遍历,从第1行开始(第0行是表头)
for i in range(1,sh.nrows):
    rowvalue = sh.row_values(i) #  每一行的数据
    single = OrderedDict()
    for j in range(len(rowvalue)):
        single[title[j]] = rowvalue[j] # 生成每一行的字典
    dict_list.append(single) # 将字典添加到列表里

print(dict_list)
j = json.dumps(dict_list,ensure_ascii=False)
# print(j)
with codecs.open('data2.json','w','utf-8') as f:
    f.write(j)

下图为生成的json数据格式:
利用pyecharts绘制桑基图---帮助小姐姐
生成桑基图:

import json

from pyecharts import options as opts
from pyecharts.charts import Sankey

# 导入输出图片工具
from pyecharts.render import make_snapshot
# 使用snapshot-selenium 渲染图片
from snapshot_selenium import snapshot

with open("data.json", "r", encoding="utf-8") as f: #  加载数据
    j = json.load(f)
# print(j)
c = (
    Sankey()
    .add(
        "sankey",
        nodes = j["nodes"],  # 结点
        links = j["links"],  # 联系
        node_gap=10,
        linestyle_opt=opts.LineStyleOpts(opacity=0.4, curve=0.5, color="source"),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Sankey-基本示例"),
                        )
    .render("gym.html")
)

make_snapshot(snapshot,file_name=c, output_name="gym.png")  # 保存图片

json

1.json.dumps将一个Python数据结构转换为JSON:

import json
data = {
    'name' : 'myname',
    'age' : 100,
}
json_str = json.dumps(data)

2.json.loads将一个JSON编码的字符串转换回一个Python数据结构:

data = json.loads(json_str)

3.json.dump() 和 json.load() 来编码和解码JSON数据,用于处理文件。

with open('test.json', 'w') as f:
    json.dump(data, f)
with open('test.json', 'r') as f:
    data = json.load(f)
相关标签: python高级学习