[Python]使用Pyecharts生成疫情分布地图

1. 引言

最近受江苏疫情影响,好多小伙伴都居家办公咯!为了密切关注疫情动态,最近写了爬取疫情分布的脚本,参考上篇链接

请添加图片描述

既然我们已经获得了相应的江苏各个地级市的疫情数据,那么我们如何来使用Python实现将数据可视化在地图上呢?

2. Pyecharts 介绍​

Apache Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
在这里插入图片描述简单来说,pyecharts具有以下特性:

  • 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
  • 囊括了 30+ 种常见图表,应有尽有
  • 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
  • 可轻松集成至 Flask,Sanic,Django 等主流 Web 框架
  • 高度灵活的配置项,可轻松搭配出精美的图表
  • 详细的文档和示例,帮助开发者更快的上手项目
  • 多达 400+ 地图文件,并且支持原生百度地图,为地理数据可视化提供强有力的支持

3. Pyecharts 安装

使用pip进行安装如下:

 pip install pyecharts -U

因为我们需要使用pycharts绘制地图,此时我们还需要安装相应的地图文件包:

pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg

其中:
​echarts-countries-pypkg 包为全球国家地图
echarts-china-provinces-pypkg包为中国省级地图
echarts-china-cities-pypkg 包为中国市级地图

4. Pyecharts 使用

安装完上述绘制地图相关的python包后,我们接下来开始画疫情分布地图。
首先,我们先来查看一段Pyecharts相关实现:

 from pyecharts import options as opts
 from pyecharts.charts import Map
 c_today = (
            Map()
            .add("今日新增人数", 
                [list(z) for z in zip(city_list, todayconfirm)],
                 maptype="江苏"
                 )
            .render("map_jiangsu_0803.html")
        )

上述代码解释如下:

  • 第1、2行导入我们需要使用的依赖库
  • 第3-11行为我们的主要实现逻辑,pyecharts支持链式调用。其中:
  • 第4行为声明一个Map对象
  • 第5-8行 为m.add(**kwargs)函数的调用,主要用于数据呈现,依次为:
    – 图例:字符串表示图例
    – 属性及取值:一般为list类型 [(attr,value)],attr在这里主要表示江苏省地级市名,attr在这里表示各地级市今日新感染人数。如果我们要对哪个地级市进行标注,就写入对应的列表即可。
    – 地图类型 maptype=’江苏’ 指定需要绘制的地区的区域。可以是省级地名,也可以是市级地名。
  • 第9行m.render():默认在当前文件生成一个html 文件

运行后会在当前目录生成 map_jiangsu_0803.html,用浏览器打开后结果如下:
请添加图片描述
当鼠标移动到对应区域后,会显示出对应地级市今日新增人数。
请添加图片描述

5. 进一步美化

上述脚本虽然可以实现我们的功能,但是颜色灰灰的,太过于单调,接下来我们来想办法进行美化,实现代码如下:

 c_today = (
         Map()
         .add("今日新增人数", 
               [list(z) for z in zip(city_list, todayconfirm)],
                maptype="江苏"
             )
         .set_global_opts(
             title_opts=opts.TitleOpts(title="江苏疫情今日新增0803"),
             visualmap_opts=opts.VisualMapOpts(max_=int( (max(todayconfirm)//10+1)*10),
                                               is_piecewise=True,
                                               range_text=["High","Low"],
                                               border_color="#000"
                                               )
             )
        .render("map_jiangsu_0803_new.html")

代码解释如下:

  • 第7-12行为调用全局配置项函数 set_global_opts,参数title_opts为标题配置项,visualmap_opts为视觉映射配置项
  • 第8行为设置地图标题
  • 第9-12行为设置视觉映射配置,其中:
    – max_代表我们数据分几段,最高上限;
    – is_piecewise代表是否为分段型数据
    – range_text代表两端的文本
    – board_color代表visualMap组件的边框颜色

运行后会在当前目录生成 map_jiangsu_0803_new.html,用浏览器打开后结果如下:
请添加图片描述

同理我们可以得到现有确诊人数分布如下:
请添加图片描述进而我们可以得到累计确诊人数分布如下:
请添加图片描述

6. 代码


完整代码可公众号内回复 pyecharts 即可获取


7. 参考

链接一
链接二


关注公众号《AI算法之道》,获取更多AI算法资讯。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵卓不凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值