python如何绘制疫情图


Posted in Python onSeptember 16, 2020

python中进行图表绘制的库主要有两个:matplotlib 和 pyecharts, 相比较而言:

matplotlib中提供了BaseMap可以用于地图的绘制,但是个人觉得其绘制的地图不太美观,而且安装相较而言有点麻烦。

pyecharts是基于百度开源的js库echarts而来,其最大的特点是:安装简单、使用也简单。

所以决定使用pyecharts来绘制地图。

1.安装pyecharts

如果有anaconda环境,可用 pip install pyecharts 命令安装pyecharts。

由于我们要绘制中国的疫情地图,所以还要额外下载几个地图。地图文件被分成了三个Python包,分别为:

全球国家地图: echarts-countries-pypkg

安装命令:pip install echarts-countries-pypkg

中国省级地图: echarts-china-provinces-pypkg

安装命令:pip install echarts-china-provinces-pypkg

中国市级地图: echarts-china-cities-pypkg

安装命令:pip install echarts-china-cities-pypkg

python如何绘制疫情图

python如何绘制疫情图

2.导包。

绘制地图时我们根据自己需要导入需要的包,在pyecharts的官方文档 https://pyecharts.org/#/ 中详细列出了绘制各种图表的的方法及参数含义,而且提供了各种图标的demo,方便我们更好地使用pyecharts。

from pyecharts.charts import Map
from pyecharts import options as opts

3.代码

# 用于保存城市名称和确诊人数
map_data = []
for i in china :
  print(i)
  # 获得省份名称
  province = i["name"]
  print("province:",province)
  province_confirm = i["total"]["confirm"]
  # 保存省份名称和该省确诊人数
  map_data.append((i["name"],province_confirm))
c = (
  # 声明一个map对象
  Map()
  # 添加数据
  .add("确诊", map_data, "china")
  # 设置标题和颜色
  .set_global_opts(title_opts=opts.TitleOpts(title="全国疫情图"),
           visualmap_opts=opts.VisualMapOpts(split_number=6,is_piecewise=True,
                            pieces=[{"min":1,"max":9,"label":"1-9人","color":"#ffefd7"},
                                {"min":10,"max":99,"label":"10-99人","color":"#ffd2a0"},
                                {"min":100,"max":499,"label":"100-499人","color":"#fe8664"},
                                {"min":500,"max":999,"label":"500-999人","color":"#e64b47"},
                                {"min":1000,"max":9999,"label":"1000-9999人","color":"#c91014"},
                                {"min":10000,"label":"10000人及以上","color":"#9c0a0d"}
                            ]))
  )
# 生成html文件
c.render("全国实时疫情.html")

运行成功后就可以在工程目录下发现一个名为“全国实时疫情”的html文件,打开就可以看到我们绘制的疫情图啦!!

python如何绘制疫情图

全部代码(包含保存到数据库,爬取数据、绘制疫情图):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
import requests
import pymysql
# 装了anaconda的可以pip install pyecharts安装pyecharts
from pyecharts.charts import Map,Geo
from pyecharts import options as opts
from pyecharts.globals import GeoType,RenderType
# 绘图包参加网址https://pyecharts.org/#/zh-cn/geography_charts

id = 432
coon = pymysql.connect(user='root', password='root', host='127.0.0.1', port=3306, database='yiqing',use_unicode=True, charset="utf8")
cursor = coon.cursor()
url="https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
resp=requests.get(url)
html=resp.json()
data=json.loads(html["data"])
time = data["lastUpdateTime"]
data_info = time.split(' ')[0]
detail_time = time.split(' ')[1]
# 获取json数据的全国省份疫情情况数据
china=data["areaTree"][0]["children"]
# 用于保存城市名称和确诊人数
map_data = []
for i in china :
  print(i)
  # 获得省份名称
  province = i["name"]
  print("province:",province)
  province_confirm = i["total"]["confirm"]
  # 保存省份名称和该省确诊人数
  map_data.append((i["name"],province_confirm))
  # 各省份下有各市,获取各市的疫情数据
  for child in i["children"]:
    print(child)
    # 获取城市名称
    city = child["name"]
    print("city:",city)
    # 获取确诊人数
    confirm = int(child["total"]["confirm"])
    # 获取疑似人数
    suspect = int(child["total"]["suspect"])
    # 获取死亡人数
    dead = int(child["total"]["dead"])
    # 获取治愈人数
    heal = int(child["total"]["heal"])
    # 插入数据库中
    cursor.execute("INSERT INTO city(id,city,confirm,suspect,dead,heal,province,date_info,detail_time) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)",
      (id, city, confirm, suspect, dead, heal, province, data_info, detail_time))
    id = id + 1
    coon.commit()
c = (
  # 声明一个map对象
  Map()
  # 添加数据
  .add("确诊", map_data, "china")
  # 设置标题和颜色
  .set_global_opts(title_opts=opts.TitleOpts(title="全国疫情图"),
           visualmap_opts=opts.VisualMapOpts(split_number=6,is_piecewise=True,
                            pieces=[{"min":1,"max":9,"label":"1-9人","color":"#ffefd7"},
                                {"min":10,"max":99,"label":"10-99人","color":"#ffd2a0"},
                                {"min":100,"max":499,"label":"100-499人","color":"#fe8664"},
                                {"min":500,"max":999,"label":"500-999人","color":"#e64b47"},
                                {"min":1000,"max":9999,"label":"1000-9999人","color":"#c91014"},
                                {"min":10000,"label":"10000人及以上","color":"#9c0a0d"}
                            ]))
  )
# 生成html文件
c.render("全国实时疫情.html")
#
# china_total="确诊" + str(data["chinaTotal"]["confirm"])+ "疑似" + str(data["chinaTotal"]["suspect"])+ "死亡" + str(data["chinaTotal"]["dead"]) + "治愈" + str(data["chinaTotal"]["heal"]) + "更新日期" + data["lastUpdateTime"]
# print(china_total)

以上就是python如何绘制疫情图的详细内容,更多关于python绘制疫情图的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
Cpy和Python的效率对比
Mar 20 Python
Python编程入门的一些基本知识
May 13 Python
python在控制台输出进度条的方法
Jun 20 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
python写入已存在的excel数据实例
May 03 Python
浅析python继承与多重继承
Sep 13 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
python线程中的同步问题及解决方法
Aug 29 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 Python
如何用Python绘制3D柱形图
Sep 16 #Python
Python Merge函数原理及用法解析
Sep 16 #Python
简单了解Python字典copy与赋值的区别
Sep 16 #Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 #Python
pycharm2020.2 配置使用的方法详解
Sep 16 #Python
python Matplotlib模块的使用
Sep 16 #Python
Python类成员继承重写的实现
Sep 16 #Python
You might like
php简单判断文本编码的方法
2015/07/30 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
Python2和Python3.6环境解决共存问题
2018/11/09 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
PHP中如何创建和修改数组
2012/05/02 面试题
如何写一个自定义标签
2012/12/28 面试题
金融行业职业生涯规划范文
2014/01/17 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
党员政治学习材料
2014/05/14 职场文书
艾滋病宣传标语
2014/06/25 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
优秀团员事迹材料
2014/12/25 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
关于MySQL中的 like操作符详情
2021/11/17 MySQL
vue 自定义组件添加原生事件
2022/04/21 Vue.js