![](https://i-blog.csdnimg.cn/direct/6a9e32671d5f4df5b5c471a9ecb3abf4.png)
![](https://i-blog.csdnimg.cn/direct/d322a758b97e4fed8f041758493dacf2.png)
![](https://i-blog.csdnimg.cn/direct/f90c3bd8bcc6405bb25c83363c810c16.png)
![](https://i-blog.csdnimg.cn/direct/5e7c9c3278d342da9ad15711e19342d3.png)
可视化案例的学习目标:
·通过案例,回忆巩固python基础的语法
·锻炼编程能力,熟练语法的使用
1.json数据格式
两种不同的语言由于数据格式不同,所以没有办法直接沟通,就比如我们可以将python
的数据格式转成json,然后把json给c
json的主要功能其实就是不同语言之间的中转站
![](https://i-blog.csdnimg.cn/direct/d0556ae6920b48a7937be192f90dc9da.png)
json其实就是一个python的列表,或者说是一个python的字典
![](https://i-blog.csdnimg.cn/direct/4d9d33a46ae44f1aaf45400256c08b62.png)
![](https://i-blog.csdnimg.cn/direct/208d76d59fc846a8a766b0025dadbb6d.png)
中文的转换会涉及一个编码问题,只需要输入一个参数 ensure_ascii就行
ensure_ascii=False 这个意思就是不使用ASCII来转换它,而是把它内容直接输出出去
![](https://i-blog.csdnimg.cn/direct/7c2f22fc54e34c1b8495a8d7e54dd29d.png)
总结:
·json:是一种轻量级的数据交互格式,采用完全独立于编程语言的文本格式来存储和表示数据(就是字符串)
·python语言使用json有很大的优势,因为:json无非就是一个独立的字典或一个内部元素都是字典的列表,所以json可以直接和python的字典或列表进行无缝转换
·通过json.dumps(data)方法把python数据转化为了json数据,如果有中文可以带上:ensure_ascii=False参数来确保中文正常转换
·通过json.loads(data)方法把json数据转化为了python列表或字典
2.pyecharts模块介绍
pyecharts模块介绍
pyecharts的本体就是Echarts的框架,Echarts框架的python版本:PyEcharts包
![](https://i-blog.csdnimg.cn/direct/3f7320f49a2b4a62872b3bb6a8fb3c5f.png)
其实它还有一个画廊的功能,官方画廊的网址是http://gallery.pyecharts.org
![](https://i-blog.csdnimg.cn/direct/bd82779ea51c4d29ba602deacf7e4c04.png)
它的功能就是产生各种各样的图表,可以在上面查看自己想要的图标代码
![](https://i-blog.csdnimg.cn/direct/21365a66f017412b8778a369496c2321.png)
![](https://i-blog.csdnimg.cn/direct/ba5d7cc19b5c43bfa1cfe434f9dd7e9c.png)
最下面也会有相应的预览效果图,支持放大缩小观看
除此以外还有各种各样的图标,大感兴趣的自行搜索
pyecharts模块安装
![](https://i-blog.csdnimg.cn/direct/f35101c199634e66b6a485e291902ad2.png)
输入 pip install pyecharts回车即可下载,下载完成以后可以输入python,切换到python环境中,然后输入import pyecharts,如果没有出现问题就是下载成功,可以正常使用了
![](https://i-blog.csdnimg.cn/direct/ee3928984d2a4f6a8db96bb3a300a837.png)
3.pyecharts快速入门
基础折线图
![](https://i-blog.csdnimg.cn/direct/c3957c7f038f48f89f4a4ce0031676ff.png)
![](https://i-blog.csdnimg.cn/direct/ac2ba0c9c12749fbac5fafa0a9d8b090.png)
输入代码后你会发现没有然后输出,但是你发现左边多了一个render.html的文件
![](https://i-blog.csdnimg.cn/direct/784051efc70742e9911a8a46eaab8b5d.png)
打开它你会发现出现了一堆代码,这些代码只有在浏览器中才可以查看
![](https://i-blog.csdnimg.cn/direct/3c0c46aeacd3447e9dbf2aacffeb85f8.png)
点击右上角,选择你电脑有的浏览器,即可使用浏览器打开
![](https://i-blog.csdnimg.cn/direct/5b3fa87d2cba4f719898bded7a9697ac.png)
这就是刚才所创建的折线图
![](https://i-blog.csdnimg.cn/direct/897fab9fff7342918608649276703b87.png)
配置选项
![](https://i-blog.csdnimg.cn/direct/f092ab52b6df4962993115629434d68f.png)
全局变量就是针对我们整个图像来去进行设置,比如说图像的标题,图像的图例,工具箱等等。
全局配置项能做什么?
·配置图表的标题
·配置图例
·配置鼠标移动效果
·配置工具栏
·等整体配置项
系列配置其实就是针对我们具体的轴数据进行配置,比如说针对我们y轴的这个数据,去进行相关个性化的配置
![](https://i-blog.csdnimg.cn/direct/dede6483c4c048f4a9032f9415ddd188.png)
全局变量就是针对这些通用的变量去设置
![](https://i-blog.csdnimg.cn/direct/871ed7db00164b13a47b8391be9f914f.png)
ctrl p 可以查看参数
line.set_global_opts(
title_opts=TitleOpts(title = "GDP展示",pos_left="center",pos_bottom="1%")
)
这一段代码是针对折线图标题的控制,title是标题名字,pos_left表示标题距离左边有多远,pos_bottom表示距离底部有多远,center表示中心的意思
from pyecharts.options import TitleOpts
这一段代码是对标题模块的导入
效果展示:
![](https://i-blog.csdnimg.cn/direct/584b63cbe457437a936d03ee83d9451d.png)
![](https://i-blog.csdnimg.cn/direct/ca58f5f32b1446ec973e63a285ca753f.png)
import导入可以使用逗号,输入多个模块名
![](https://i-blog.csdnimg.cn/direct/92dd70d7736344e295ecfe337d008a83.png)
这些是一部分具体演示,大家可以反复琢磨,不理解的同学,可以去参考pyecharts首页,点击全局配置项即可查看具体用法
![](https://i-blog.csdnimg.cn/direct/3cf0163493f44a338da0f8b192bce1e4.png)
4.数据处理
大家想要处理数据,使得数据看起来更简单,可以使用这个网址,进行数据处理
JSON在线视图查看器(Online JSON Viewer)
![](https://i-blog.csdnimg.cn/direct/9bbe0e5b36af4b23987b981e85dd7d9b.png)
点击json视图,然后输入数据。
这里我以自己的非常多的一个数据为例给大家演示。
{"status":0,"msg":"success","data":[{"name":"美国","trend":{"updateDate":["2.22","2.23","2.24","2.25","2.26","2.27","2.28","2.29","3.1","3.2","3.3","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.17","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25",......382,63297,39060,35816,1275,66886,136179,96705,100870,55840,26529,128492,156048,133543,115438,144461,70266,24123,236918,115516,171448,142576,155334,70119,32695,271457,169842]}]}}]}
![](https://i-blog.csdnimg.cn/direct/5b334852165e438a9d7bcf409c9205e8.png)
是不是还是有些太长了
![](https://i-blog.csdnimg.cn/direct/684692e92caa479bbd602b9c434ed2ce.png)
点击视图,即可看到最简版,点击加号,里面逐层嵌套
![](https://i-blog.csdnimg.cn/direct/67911270ffcf4a9890e543b2fc4ec8da.png)
![](https://i-blog.csdnimg.cn/direct/582e57f6a5944f299a48646ede64c496.png)
![](https://i-blog.csdnimg.cn/direct/b7615e4f1f55417f8b36458e17b5b38a.png)
![](https://i-blog.csdnimg.cn/direct/337e3cd6552f4323b242d139e1841aa6.png)
由此可见,开头和结尾这两部分不符合json的规范,将他替换成空字符,也就是删掉它
![](https://i-blog.csdnimg.cn/direct/9ee6648240564699a20757ed902bc36d.png)
当我们把json格式转化为python,可以使用这个例子来演示一下,如果运行不报错,那就是没有问题
![](https://i-blog.csdnimg.cn/direct/ba41eee29f9b40658158415905a405eb.png)
仔细观察一下这个层级关系,可以直接取到trend里面,简化数据
![](https://i-blog.csdnimg.cn/direct/cfe6ba819109481dbaa61bb193c67225.png)
![](https://i-blog.csdnimg.cn/direct/700e06f1c6244c78836b19ea30c0da0b.png)
我们只取2020年的数据
![](https://i-blog.csdnimg.cn/direct/eccf3688f8874c72be628536a983e129.png)
这样找层级关系
![](https://i-blog.csdnimg.cn/direct/ab23608694ed40b892b290e84cf6f569.png)
写两步就print运行看看是否正确
5.创建折线图
目标:通过pyecharts完成美日印三国疫情折线图
相信大家应该已经掌握了折线图的制作流程,接下来直接上代码
label_opts=LabelOpts(is_show=False)
这个代码可以让折线统计图上的数字不显示出来
![](https://i-blog.csdnimg.cn/direct/72aad118a3cf44c398ef54456b0683ff.png)
![](https://i-blog.csdnimg.cn/direct/b2b2470174344f0ea19319a3fea52625.png)
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LabelOpts
# 处理数据
f_us = open("D:/美国.txt","r",encoding="UTF-8")
us_data = f_us.read() # 美国的全部内容
f_jp = open("D:/日本.txt","r",encoding="UTF-8")
jp_data = f_jp.read() # 日本的全部内容
f_in = open("D:/印度.txt","r",encoding="UTF-8")
in_data = f_in.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转python字典
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年(到314下标结束)
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年(到314下标结束)
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() # 构建折线图对象
# 添加x轴数据
line.add_xaxis(us_x_data) # x轴是公共的,所以使用一个国家的数据即可
# 添加y轴数据
line.add_yaxis("美国确诊人数",us_y_data,label_opts=LabelOpts(is_show=False)) # 添加美国的y轴数据
line.add_yaxis("日本确诊人数",jp_y_data,label_opts=LabelOpts(is_show=False)) # 添加日本的y轴数据
line.add_yaxis("印度确诊人数",in_y_data,label_opts=LabelOpts(is_show=False)) # 添加印度的y轴数据
# 设置全局选项
line.set_global_opts(
# 标题设置
title_opts=TitleOpts(title="2020年美日印三国确诊人数对比折线图",pos_left="center",pos_bottom="1%")
)
# 调用render方法,生成图表
line.render()
# 关闭文件对象
f_us.close()
f_jp.close()
f_in.close()
![](https://i-blog.csdnimg.cn/direct/e5a21d6f13a94a03acb424f2c4b5462d.png)