一、JSON数据
1 定义
JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据。
JSON本质上是一个带有特定格式的字符串。
2 Python数据与Json数据的相互转换
# 导入json模块
import json
# 准备符合格式json格式要求的python数据
data = [{"name":"tim","age":"20"},{"name":"jim","age":"21"}]
# 通过json.dumps(data)方法把python数据转换为json数据
data = json.dumps(data)
# 通过json.loads(data)方法吧json数据转换为python数据,字典或列表
data = json.loads(data)
二、pyecharts模块
1 模块导入
折线图示例:
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
学习参考:
pyecharts官方文档:https://pyecharts.org/#/zh-cn/intro
pyecharts画廊官方文档:https://gallery.pyecharts.org/#/README
2 全局配置
全局配置通过set_global_opts方法进行配置:
语法:
line.set_global_opts(
# 标题设置
title_opts = TitleOpts("测试",pos_left="center",pos_buttom="1%"),
# 图例设置
legend_opts = LengendOpts(is_show=True),
# 工具箱设置
toolbox_opts = ToolBoxOpts(is_show=True),
# 视觉映射设置
visualmao_opts = VisualMapOpts(is_show=True),
# 提示框设置
tooltip_opts = TooltipOpts(is_show=True),
····
)
详细参考pyecharts官方文档
3 疫情折线图案例
数据:
链接:pan.baidu.com/s/1uX83Ts4A… 提取码:43fk
代码:
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LabelOpts
# 处理数据
us_f = open("../../数据资料\资料\可视化案例数据\折线图数据\美国.txt", "r", encoding="utf-8")
us_data = us_f.read()
jp_f = open("../../数据资料\资料\可视化案例数据\折线图数据\日本.txt", "r", encoding="utf-8")
jp_data = jp_f.read()
in_f = open("../../数据资料\资料\可视化案例数据\折线图数据\印度.txt", "r", encoding="utf-8")
in_data = in_f.read()
# 去掉不合JSON规范的开头
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
in_data = in_data.replace("jsonp_1629350745930_63180(", "")
# 去掉不合JSON规范的结尾
us_data = us_data[:-2]
jp_data = jp_data[:-2]
in_data = in_data[:-2]
# json 数据转换为字典数据
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)
# 获取trend key
us_trend_data = us_dict["data"][0]["trend"]
jp_trend_data = jp_dict["data"][0]["trend"]
in_trend_data = in_dict["data"][0]["trend"]
# 获取日期数据,作x轴,取2020年数据
us_x_data = us_trend_data["updateDate"][:314]
jp_x_data = jp_trend_data["updateDate"][:314]
in_x_data = in_trend_data["updateDate"][:314]
# 获取确诊数据,用作y轴,取2020年数据
us_y_data = us_trend_data["list"][0]["data"][:314]
jp_y_data = jp_trend_data["list"][0]["data"][:314]
in_y_data = in_trend_data["list"][0]["data"][:314]
# 生成图标
line = Line()
line.add_xaxis(us_x_data) # x轴公用
line.add_yaxis("美国确诊人数:", us_y_data, label_opts=LabelOpts(is_show=False))
line.add_yaxis("日本确诊人数:", jp_y_data, label_opts=LabelOpts(is_show=False))
line.add_yaxis("印度确诊人数:", in_y_data, label_opts=LabelOpts(is_show=False))
line.set_global_opts(
title_opts=TitleOpts(title="2020年美日印疫情折线图", pos_left="center", pos_bottom="1%")
)
line.render()
# 关闭文件
us_f.close()
jp_f.close()
in_f.close()