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

it2023-10-01  82

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)
最新回复(0)