# 折线图项目实战
"""
什么是json
· json是一种轻量级的数据交互格式。可以按照json指定的格式去组织和封装数据。
· json本质上是一个带有特定格式的字符串
主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互,类似于:
· 国际通用语言-英语
· 中国56个民族不同地区的通用语言-普通话
json有什么用
· 各种编程语言存储数据的容器不尽相同,在python中有字典dict这样的数据类型,而其他语言可能没有对应的字典。
为了让不同的语言能够相互通用的互相传递数据,json就是一种非常良好的中转数据格式。如下图,以python和c语言互传数据为例。
json格式数据转化
· json格式的数据要求很严格
# json数据的格式可以是:
{"name":"admin","age":18}
# 也可以是:
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}]
pyecharts模块
· 如果想要做出数据可视化效果图,可以借助pyecharts模块来完成
概况:
· Echarts是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可,而python是门富有表达力的语言,
很适合用于数据处理,当数据分析遇上数据可视化时,pyecharts诞生了。
pyecharts配置:
· pyecharts模块中有很多的配置选项,常用到2个类别的选项:
· 全局配置选项
全局配置选项可以通过set_global_opts方法来进行配置,相应的选项和选项功能如下:
· 系列配置选项
"""
# 导入json模块
import json
# 导入pyecharts包charts模块Line功能
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts,LabelOpts
# 准备符合json格式要求的python数据
date= [{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}]
# 通过json.dumps()方法把python数据转化为了json数据
# 注意,默认如果不加上ensure_ascii指定参数,则中文输出会转码成ASCII编码格式,需要添加ensure_ascii=False来指定不转换ASCII编码格式。
json_date = json.dumps(date,ensure_ascii=False)
print(json_date)
# 通过json.loads()方法把json数据转化为了python数据
print(json.loads(json_date))
# 创建折线图对象
line_var=Line()
# 折线图x轴坐标赋值
line_var.add_xaxis(["张三","李四","赵五"])
# 折线图y轴坐标赋值
line_var.add_yaxis("年龄",[21,17,30])
# 图表全局设置
line_var.set_global_opts(
title_opts=TitleOpts(title="年龄展示",pos_left="center",pos_top="1%"), # 标题设置,pos_left是左定位,pos_top是顶部定位
legend_opts=LegendOpts(is_show=True), # 图例显示
toolbox_opts=ToolboxOpts(is_show=True), # 工具箱显示
visualmap_opts=VisualMapOpts(is_show=True) # 视觉映射显示
)
line_var.render()
us_f = open("F:/美国.txt","r",encoding="UTF-8")
us_date = us_f.read()
us_f.close()
jp_f = open("F:/日本.txt","r",encoding="UTF-8")
jp_date = jp_f.read()
jp_f.close()
in_f = open("F:/印度.txt","r",encoding="UTF-8")
in_date = in_f.read()
in_f.close()
us_date = us_date.replace("jsonp_1629344292311_69436(","")
us_date = us_date[:-2]
dict_us_date = json.loads(us_date)
jp_date = jp_date.replace("jsonp_1629350871167_29498(","")
jp_date = jp_date[:-2]
dict_jp_date = json.loads(jp_date)
in_date = in_date.replace("jsonp_1629350745930_63180(","")
in_date = in_date[:-2]
dict_in_date = json.loads(in_date)
update_date_us_x = dict_us_date["data"][0]["trend"]["updateDate"][0:314]
update_date_us_y = dict_us_date["data"][0]["trend"]["list"][0]["data"][0:314]
print(update_date_us_x)
print(update_date_us_y)
update_date_jp_x = dict_jp_date["data"][0]["trend"]["updateDate"][0:314]
update_date_jp_y = dict_jp_date["data"][0]["trend"]["list"][0]["data"][0:314]
print(update_date_jp_x)
print(update_date_jp_y)
update_date_in_x = dict_in_date["data"][0]["trend"]["updateDate"][0:314]
update_date_in_y = dict_in_date["data"][0]["trend"]["list"][0]["data"][0:314]
print(update_date_in_x)
print(update_date_in_y)
pro_line = Line()
# 折线图x轴坐标赋值--X轴是共用的,所以用一个国家的即可
pro_line.add_xaxis(update_date_us_x)
# 折线图y轴坐标赋值,LabelOpts(is_show=False)意思是取消折线上的数值标识
pro_line.add_yaxis("美国新冠确诊数据",update_date_us_y,label_opts=LabelOpts(is_show=False))
pro_line.add_yaxis("日本新冠确诊数据",update_date_jp_y,label_opts=LabelOpts(is_show=False))
pro_line.add_yaxis("印度新冠确诊数据",update_date_in_y,label_opts=LabelOpts(is_show=False))
# 图表全局设置
pro_line.set_global_opts(
title_opts=TitleOpts(title="新冠确诊数据",pos_left="center",pos_bottom="1%"), # 标题设置,pos_left是左定位,pos_top是顶部定位
legend_opts=LegendOpts(is_show=True), # 图例显示
toolbox_opts=ToolboxOpts(is_show=True), # 工具箱显示
visualmap_opts=VisualMapOpts(is_show=True) # 视觉映射显示
)
pro_line.render()
# 最后图片生成如下:
|