麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

「教程」使用 pyecharts 绘制疫情地图

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

相关阅读

麻辣GIS-fungis

作者:

一个努力搬砖的GISer

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

已有 2 条评论

  1. 麻辣GIS-感谢经历
    1#
    感谢经历  · 2020-04-18 18:05

    很nice,非常有帮助!

留言板(小编看到第一时间回复)