「教程」使用 pyecharts 绘制疫情地图
发布时间: 2020-02-18
所属分类: Python、ArcGIS 学习及开发
pyecharts 是一个用于生成 Echarts 图表的类库,用 Echarts 生成的图可视化效果非常棒。相比利用gis桌面产品制图来说,利用pyecharts来制作地图,少了矢量数据的限制,只要输入正确格式的数据,就能快速地制作地图,有多套地图样式可以使用,对于制作一些相对简单、频繁变动的图表来说具有莫大的优势。废话不多说,下面开始上图上代码。
基于丁香园数据的中国疫情图(2020/02/10数据为例)
实现代码:
# -*- coding: utf-8 -*-
"""
@Author : fungis@163.com
@Time : 2020/2/9 13:12
"""
# V1 版本开始支持链式调用
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.globals import ThemeType # 主题
# 省会及直辖市
data = [['江苏', 492], ['安徽', 830], ['湖南', 879], ['河南', 1073], ['浙江', 1092], ['广东', 1151], ['天津', 94], ['内蒙古', 58],
['北京', 337], ['陕西', 213], ['广西', 210], ['宁夏', 49], ['贵州', 109], ['上海', 295], ['江西', 771], ['福建', 261],
['新疆', 49], ['四川', 405], ['云南', 141], ['海南', 136], ['山东', 459], ['吉林', 80], ['黑龙江', 331], ['河北', 218],
['香港', 36], ['重庆', 468], ['山西', 119], ['甘肃', 83], ['湖北', 29631], ['辽宁', 107], ['台湾', 18], ['澳门', 10],
['青海', 18], ['西藏', 1]]
# 方法一 设置地图参数
map = (
Map(init_opts=opts.InitOpts(bg_color="#FFFAFA", theme=ThemeType.ESSOS, width=1000))
.add("确诊人数", data)
.set_global_opts(
title_opts=opts.TitleOpts(title="fungis-基于丁香园数据的疫情图"),
visualmap_opts=opts.VisualMapOpts(
is_piecewise=True, # 设置是否为分段显示
# 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式。例如:
pieces=[
{"min": 2000, "label": '>2000人', "color": "#eb2f06"},
{"min": 1000, "max": 2000, "label": '1001-2000人', "color": "#FF3030"}, # 不指定 max,表示 max 为无限大(Infinity)。
{"min": 500, "max": 1000, "label": '500-1000人', "color": "#FF4500"},
{"min": 100, "max": 499, "label": '100-499人', "color": "#FF7F50"},
{"min": 10, "max": 99, "label": '10-99人', "color": "#FFA500"},
{"min": 1, "max": 9, "label": '1-9人', "color": "#FFDEAD"},
],
# 两端的文本,如['High', 'Low']。
range_text=['高', '低'],
),
)
)
map.render(path="./中国疫情人数分级设色地图1.html")
效果如图:
基于丁香园数据的中国疫情图(2020/02/10数据为例)
实现代码如下:
# -*- coding: utf-8 -*-
"""
@Author : fungis@163.com
@Time : 2020/2/9 13:12
"""
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Map#主题
# 省会及直辖市
data = [['江苏', 492], ['安徽', 830], ['湖南', 879], ['河南', 1073], ['浙江', 1092], ['广东', 1151], ['天津', 94], ['内蒙古', 58],
['北京', 337], ['陕西', 213], ['广西', 210], ['宁夏', 49], ['贵州', 109], ['上海', 295], ['江西', 771], ['福建', 261],
['新疆', 49], ['四川', 405], ['云南', 141], ['海南', 136], ['山东', 459], ['吉林', 80], ['黑龙江', 331], ['河北', 218],
['香港', 36], ['重庆', 468], ['山西', 119], ['甘肃', 83], ['湖北', 29631], ['辽宁', 107], ['台湾', 18], ['澳门', 10],
['青海', 18], ['西藏', 1]]
# 方法一 设置地图参数
map = (
Map(init_opts=opts.InitOpts(bg_color="#FFFAFA", theme=ThemeType.ESSOS,width=1000))
.add("确诊人数", data)
.set_global_opts(
title_opts=opts.TitleOpts(title="fungis-基于丁香园数据的疫情图"),
visualmap_opts=opts.VisualMapOpts(max_=2000),#最大区间值,因图而异
)
)
map.render(path="./html/中国疫情人数区间地图1.html")
效果如图:
基于丁香园数据的中国疫情组合统计表(2020/02/10数据为例)
代码如下
# -*- coding: utf-8 -*-
"""
@Author : fungis@163.com
@Time : 2020/2/9 13:12
"""
from pyecharts import options as opts #引入配置项
from pyecharts.charts import Bar,Line,Grid
# 内置主题类型可查看 pyecharts.globals.ThemeType
from pyecharts.globals import ThemeType
columns = ['江苏', '安徽', '湖南', '河南', '浙江', '广东', '天津', '内蒙古', '北京', '陕西', '广西', '宁夏', '贵州', '上海', '江西', '福建', '新疆', '四川',
'云南', '海南', '山东', '吉林', '黑龙江', '河北', '香港', '重庆', '山西', '甘肃', '湖北', '辽宁', '台湾', '澳门', '青海', '西藏']
confirmedCount = [492, 830, 879, 1073, 1092, 1151, 94, 58, 337, 213, 210, 49, 109, 295, 771, 261, 49, 405, 141, 136,
459, 80, 331, 218, 36, 468, 119, 83, 29631, 107, 18, 10, 18, 1]
curedCount = [80, 80, 194, 179, 205, 148, 4, 5, 44, 26, 18, 13, 7, 44, 102, 35, 0, 76, 18, 19, 63, 12, 15, 35, 0, 51,
25, 16, 1795, 12, 1, 1, 3, 0]
deadCount = [0, 3, 1, 6, 0, 1, 1, 0, 2, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 3, 1, 1, 7, 2, 1, 2, 0, 2, 871, 0, 0, 0, 0, 0]
#定义三个图表对象
grid = Grid()
bar = Bar()
line = Line()
#显示主题设定
grid.theme = ThemeType.PURPLE_PASSION
grid.width = 1200
#设置数据与图表参数
bar.height=1000
bar.add_xaxis(columns)
bar.add_yaxis("治愈人数",curedCount)
bar.add_yaxis("死亡人数",deadCount)
bar.set_global_opts(title_opts=opts.TitleOpts("全国疫情确诊人数分布图-fungis")
,tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross") # 交叉指向工具
)
bar.extend_axis(yaxis=opts.AxisOpts(type_="value",
name="人数",
min_=0,
max_=35000,
position="right",
axislabel_opts=opts.LabelOpts(formatter="{value} 人"),
))
# 在bar上增加Y轴,在line图上选择对应的轴向
line.add_xaxis(columns)
line.add_yaxis("确诊人数",confirmedCount,yaxis_index = 1)
# 把line添加到bar上
bar.overlap(line)
# 这里如果不需要grid也可以,直接设置bar的格式,然后显示bar即可
#bar.render_notebook()
grid.add(chart = bar,grid_opts = opts.GridOpts(),is_control_axis_index = True)
grid.render(path='./中国组合图1.html')
效果如图:
基于丁香园数据的河南疫情确诊人数分布图(2020/02/10数据为例)
代码如下:
# -*- coding: utf-8 -*-
"""
@Author : fungis@163.com
@Time : 2020/2/9 13:53
"""
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.globals import ThemeType # 主题
# 各个城市相关数据
data = [['信阳市', 220], ['南阳市', 134], ['郑州市', 130], ['驻马店市', 123], ['商丘市', 83], ['周口市', 65], ['平顶山市', 52], ['新乡市', 46],
['安阳市', 45], ['许昌市', 31], ['漯河市', 30], ['洛阳市', 27], ['焦作市', 25], ['开封市', 24], ['鹤壁市', 17], ['濮阳市', 10],
['三门峡市', 7], ['济源市', 4]]
cityName = ['信阳市', '南阳市', '郑州市', '驻马店市', '商丘市', '周口市', '平顶山市', '新乡市', '安阳市', '许昌市', '漯河市', '洛阳市', '焦作市', '开封市', '鹤壁市',
'濮阳市', '三门峡市', '济源市']
confirmedCount = [220, 134, 130, 123, 83, 65, 52, 46, 45, 31, 30, 27, 25, 24, 17, 10, 7, 4]
curedCount = [28, 28, 34, 14, 9, 11, 12, 6, 10, 2, 6, 2, 1, 1, 3, 0, 3, 0]
deadCount = [0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
map = (
# 初始化配置项中可以设置画布宽高,背景色和主题
Map(init_opts=opts.InitOpts(bg_color="#FFFAFA", theme=ThemeType.ROMANTIC, width=1000))
.add("确诊人数", data, "河南", is_map_symbol_show=False, ) # 设置是否显示地图上的小红点
.set_global_opts(
# 标题配置项,pos_left可取值center、left、right、5%等等
title_opts=opts.TitleOpts(title="河南疫情确诊人数分布图-fungis", pos_left="left"),
visualmap_opts=opts.VisualMapOpts(
is_piecewise=True, # 设置是否为分段显示
# 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式。例如:
pieces=[
{"min": 201, "label": '>200人', "color": "#e55039"}, # 不指定 max,表示 max 为无限大(Infinity)。
{"min": 101, "max": 200, "label": '101-200人', "color": "#FF4500"},
{"min": 51, "max": 100, "label": '51-100人', "color": "#FF7F50"},
{"min": 10, "max": 50, "label": '10-50人', "color": "#FFA500"},
{"min": 1, "max": 9, "label": '1-9人', "color": "#FFDEAD"},
],
# 两端的文本,如['High', 'Low']。
range_text=['高', '低'],
),
)
)
map.render(path="./河南疫情确诊人数分布图1.html")
效果如图:
基于丁香园数据的河南疫情组合统计表
代码如下:
# -*- coding: utf-8 -*-
"""
@Author : fungis@163.com
@Time : 2020/2/9 13:53
"""
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
columns = ['信阳市', '南阳市', '郑州市', '驻马店市', '商丘市', '周口市', '平顶山市', '新乡市', '安阳市', '许昌市', '漯河市', '洛阳市', '焦作市', '开封市', '鹤壁市',
'濮阳市', '三门峡市', '济源市']
confirmedCount = [220, 134, 130, 123, 83, 65, 52, 46, 45, 31, 30, 27, 25, 24, 17, 10, 7, 4]
curedCount = [28, 28, 34, 14, 9, 11, 12, 6, 10, 2, 6, 2, 1, 1, 3, 0, 3, 0]
deadCount = [0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
bar = (
Bar(init_opts=opts.InitOpts(bg_color="#FFFAFA", theme=ThemeType.LIGHT, width=1200))
.add_xaxis(columns)
.add_yaxis("治愈人数", curedCount)
.add_yaxis("死亡人数", deadCount)
.extend_axis(yaxis=opts.AxisOpts(type_="value",
name="人数",
position="left",
axislabel_opts=opts.LabelOpts(formatter="{value} 人"),
))
.set_global_opts(title_opts=opts.TitleOpts(title="fungis-基于丁香园数据的河南疫情图"))
)
bar.render(path="./河南柱状图1.html")
效果如图
数据下载
参照之前文章《使用Python抓取2019-nCov疫情数据》
文/fungis
作者简介:你所做的一切努力并不会立即给你想要的一切,但可以让你逐渐成为你想成为的那一种人!一个热带生活、乐于分享、努力搬砖的giser
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读

最新GIS干货

私享圈子
很nice,非常有帮助!
enjoy it :-)