Python数据可视化-折线图可视化

Python数据可视化-折线图

一、JSON数据格式

1.1 什么是json

  • JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据
  • JSON本质上是一个带有特定格式的字符串

主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互

1.2 json有什么用

各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型, 而其它语言可能没有对应的字典。为了让不同的语言都能够相互通用的互相传递数据,JSON就是一种非常良好的中转数据格式。

1.3 json格式数据转化

# json数据的格式可以是: 
{"name":"admin","age":18} 


# 也可以是:  
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}] 

1.4 Python数据和Json数据的相互转化

# 导入json模块
import json
# 准备符合格式json格式要求的python数据
data = {{"name":"老王", "age":16},{"name":"张飒","age":24}}
# 通过json.dumps(data)方法把python数据转化为了json数据
data = json.dumps(data)
# 通过json.loads(data)方法把json数据转化为了python数据
data = json.loads(data)

1.5 总结

image-20230723164848697

二、pyecharts模块介绍

3.1 pyecharts模块

概况

Echarts是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图标设计,得到了众多开发者的认可,而python是富有表达力的语言,很适合用于数据处理,当数据分析遇到数据可视化时pyecharts就诞生了。

pyecharts模块安装

pip命令即可快速安装PyEcharts模块

pip install pyecharts -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2 总结

image-20230723174250682

三、pyecharts快速入门

3.1 pyecharts入门

基础折线图

"""
演示pyecharts的基础入门
"""
# 导包
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
# 创建一个折线图对象
line = Line()
# 给折线图对象添加x轴的数据
line.add_xaxis(["中国", "美国", "日本"])
# 给折线图对象添加y轴的数据
line.add_yaxis("GDP", [30, 20, 10])

# 设置全局配置项set_global_opts来设置,
line.set_global_opts(
    # pos_bottom: title 组件离容器下侧的距离。bottom的值可以是像 20 这样的具体像素值
    # 可以是像 '20%' 这样相对于容器高宽的百分比。
    title_opts=TitleOpts(title="GDP展示", pos_left="center", pos_bottom="1%"),
    legend_opts=LegendOpts(is_show=True),  # 图例,默认就是True
    toolbox_opts=ToolboxOpts(is_show=True),  # 工具箱
    visualmap_opts=VisualMapOpts(is_show=True)  # 视觉映射
)

# 通过render方法,将代码生成为图像
line.render()

效果:

image-20230723183817549

3.2 pyecharts的配置选项

  • 全局配置选项
  • 系列配置选项

set_global_opts方法

这里全局配置选项可以通过set_global_opts方法来进行配置,相应的选项和选项的功能如下:

image-20230723184042201

3.3 总结

image-20230723184143205

四、数据处理

导入模块

# 导入json模块
import json

对数据进行处理,让数据符合json格式

# 把不符合json数据格式的 "jsonp_1629350871167_29498(" 去掉 
data = data.replace("jsonp_1629350871167_29498(", "") 
# 把不符合json数据格式的 ");" 去掉 
data = data[:-2] 
# 数据格式符合json格式后,对数据进行转化 
data = json.loads(data) 
# 获取日本的疫情数据 
data = data["data"][0]['trend’] 
# x1_data存放日期数据 
x1_data = data['updateDate’] 
# y1_data存放人数数据 
y1_data = data['list'][0]["data"] 
# 获取2020年的数据 
x1_data = data['updateDate'][:314] 
# 获取2020年的数据 
y1_data = data['list'][0]["data"][:314]

五、创建折线图

"""
演示可视化需求1:折线图开发
"""
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts
# 处理数据
f_us = open("美国.txt", "r", encoding="UTF-8")
f_india = open("印度.txt", "r", encoding="UTF-8")
f_japan = open("日本.txt", "r", encoding="UTF-8")

us_data = f_us.read()
india_data = f_india.read()
japan_data = f_japan.read()
# 去掉不合json规范的开头
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
india_data = india_data.replace("jsonp_1629350745930_63180(", "")
japan_data = japan_data.replace("jsonp_1629350871167_29498(", "")
# 去掉不合json规范的结尾
us_data = us_data[:-2]
india_data = india_data[:-2]
japan_data = japan_data[:-2]
# json转python字典
us_dict = json.loads(us_data)
india_dict = json.loads(india_data)
japan_dict = json.loads(japan_data)
# 获取trend  key
us_trend_data = us_dict['data'][0]['trend']
india_trend_data = india_dict['data'][0]['trend']
japan_trend_data = japan_dict['data'][0]['trend']
# 获取日期数据,用于x轴,取2020年(到314下标结束)
us_x_data = us_trend_data['updateDate'][:314]
india_x_data = india_trend_data['updateDate'][:314]
japan_x_data = japan_trend_data['updateDate'][:314]
# 获取确诊数据,用于y轴,取2020年(到314下标结束)
us_y_data = us_trend_data['list'][0]['data'][:314]
india_y_data = india_trend_data['list'][0]['data'][:314]
japan_y_data = japan_trend_data['list'][0]['data'][:314]
# 生成图表
line = Line()  # 构建折线图对象
# 添加x轴数据
line.add_xaxis(us_x_data)  # x轴是公用的,所以使用一个国家的数据即可
# 添加y轴数据
line.add_yaxis("美国确诊人数", us_y_data, label_opts=LabelOpts(is_show=False))
line.add_yaxis("印度确诊人数", india_y_data, label_opts=LabelOpts(is_show=False))
line.add_yaxis("日本确诊人数", japan_y_data, label_opts=LabelOpts(is_show=False))
# 设置全局选项
line.set_global_opts(
    # 标题设置
    title_opts=TitleOpts(title="2020年美日印三国确诊人数对比折线图", pos_left="center", pos_bottom="1%")
)
# 调用render方法,生成图表
line.render()
# 关闭文件对象
f_us.close()

实现效果如下

image-20230727102303603

posted @ 2023-07-27 14:51  鲍宪立  阅读(112)  评论(0编辑  收藏  举报