利用pyecharts绘制桑基图---帮助小姐姐
程序员文章站
2022-05-25 21:16:40
...
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数据格式:
生成桑基图:
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)