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

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

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

原始数据的示意图:
利用pyecharts绘制桑基图---帮助小姐姐_第1张图片
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绘制桑基图---帮助小姐姐_第2张图片
生成桑基图:

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高级学习)