画图代码文件
draw_picture.py
from pyecharts import options as opts
from pyecharts.charts import Map, Page, Tab
from pyecharts.faker import Faker
from pyecharts.components import Table
from pyecharts.charts import Line, Bar
from pyecharts.globals import ThemeType
from datetime import date
from json_data1 import province_data_sum, province_data_now
# from snapshot_selenium import snapshot
from pyecharts.render import make_snapshot
# 生成全国疫情确诊人数累计地图
def get_map_old_data() -> map:
print(province_data_sum)
update_date = date.today()
map = (
Map(init_opts=opts.InitOpts(theme=ThemeType.WHITE, width='100%', height='900px'))
.add("全国累计确诊人数", province_data_sum, "china", is_map_symbol_show=False, is_roam=False)
.set_global_opts(
title_opts=opts.TitleOpts(
title="新冠状病毒全国疫情地图统计",
subtitle="更新日期:{}".format(update_date),
),
# 视觉映射配置项
visualmap_opts=opts.VisualMapOpts(
is_show=True, # 是否显示
min_=0, # 左下角刻度最小值
max_=2000,
range_color=['#FFFFFF', '#F7DC6F', '#F4D03F', '#F1C40F', '#C0392B', '#A93226'], # 颜色过滤配置
),
) # .render('img/全国疫情可视化map.html')
)
# make_snapshot(snapshot, map.render(), 'img/全国疫情可视化map.gif')
return map
# 生成全国疫情当前确诊人数地图
def get_map_now_data() -> map:
print(province_data_now)
update_date = date.today()
map = (
Map(init_opts=opts.InitOpts(theme=ThemeType.WHITE, width='100%', height='900px'))
.add("全国现确诊人数", province_data_now, "china", is_map_symbol_show=False, is_roam=False)
.set_global_opts(
title_opts=opts.TitleOpts(
title="新冠状病毒全国疫情地图统计",
subtitle="更新日期:{}".format(update_date),
),
# 视觉映射配置项
visualmap_opts=opts.VisualMapOpts(
is_show=True, # 是否显示
min_=0, # 左下角刻度最小值
max_=100,
range_color=['#FFFFFF', '#F1C40F', '#D4AC0D'] # 颜色过滤配置
)
)
)
# make_snapshot(snapshot, map.render(), 'img/全国疫情可视化map1.gif')
return map
# 生成折线统计图
def get_line_pic():
from json_data1 import province_data_tuple
c = (
Line(init_opts=opts.InitOpts(width="100%",
# 设置动画
animation_opts=opts.AnimationOpts(
animation_delay=1000,
animation_duration=10000,
)
))
.add_xaxis(province_data_tuple[0])
.add_yaxis(
"累计感染人数",
province_data_tuple[1],
# areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
"累计治愈人数",
province_data_tuple[2],
# areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
"累计死亡人数",
province_data_tuple[3],
# areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="新冠肺炎走势图"),
)
)
# make_snapshot(snapshot, c, 'img/全国疫情可视化line.gif')
return c
def get_bar_pic() -> Bar:
from json_data1 import province_data_tuple
c = (
Bar(init_opts=opts.InitOpts(width='100%'))
.add_xaxis(province_data_tuple[0])
# 不显示数据
.add_yaxis("感染人数", province_data_tuple[1], label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="新冠肺炎感染人数"),
# 锁定区域
datazoom_opts=[opts.DataZoomOpts()],
)
)
return c
# page图
def page_picture():
page = Page(layout=Page.SimplePageLayout)
page.add(
get_map_old_data(),
get_map_now_data(),
get_line_pic(),
get_bar_pic(),
)
page.render('img/全国疫情可视化汇总图.html')
# make_snapshot(snapshot, page.render(), '全国疫情可视化.gif')
page_picture()
# def tab_picture():
# tab = Tab()
# tab.add(get_map_old_data(), "全国感染人数累计分布图")
# tab.add(get_map_now_data(), "当前感染人数分布图")
# tab.add(get_line_pic(), "疫情趋势图")
# tab.add(get_bar_pic(), "疫情条形统计图")
# tab.render('img/全国疫情可视化.html')
数据来源 sina api
# 封装 json 数据类 返回所有需要的数据
# 新浪数据接口
# https://interface.sina.cn/news/wap/fymap2020_data.d.json
import json
import requests
class JsonData:
# 获取新浪api json 数据
def get_sina_data(self):
"""
:return:
"""
# https://c.m.163.com/ug/api/wuhan/app/data/list-total
url = "https://interface.sina.cn/news/wap/fymap2020_data.d.json"
response = requests.request('get', url=url)
json_data = json.loads(response.text)
# with open('json.txt', 'r+') as f:
# json_text = f.read()
# json_data = json.loads(json_text)
# print(json_data, type(json_data))
return json_data['data']
# 获取地方名和累计人数
def get_old_number(self):
"""
:return: 各地区的 [名字和人数] 列表
"""
province_data = []
json_data = self.get_sina_data()['list']
for one_data in json_data:
# 获取各地区名称和感染人数
province_data.append([
one_data['name'],
one_data['value']
])
return province_data
# 获取当前新冠肺炎感染人数
def get_now_number(self):
province_data = []
json_data = self.get_sina_data()['list']
for one_data in json_data:
# 获取各地区名称和当前感染人数
province_data.append([
one_data['name'],
one_data['econNum']
])
return province_data
# 历史数据 从 1.11 截止到2020年8月10日
def get_history_list(self):
json_data_history = self.get_sina_data()['historylist']
date_x = []
people_number_y = []
people_cure_y = []
people_death_y = []
for data in json_data_history:
date_x.append(data['date'])
people_number_y.append(data['cn_conNum'])
people_cure_y.append(data['cn_cureNum'])
people_death_y.append(data['cn_deathNum'])
return date_x[::-1], people_number_y[::-1], people_cure_y[::-1], people_death_y[::-1]
jsondata = JsonData()
province_data_sum = jsondata.get_old_number() # 各个地区累计人数
province_data_now = jsondata.get_now_number() # 各个地区当前人数
province_data_tuple = jsondata.get_history_list()