查看原文
其他

用 pyecharts 画出中国疫情地图(附源码)

Mort Python中文社区 2022-12-04

作者简介:Mort,数据分析爱好者,擅长数据可视化,比较关注机器学习领域,希望能和业内朋友多学习交流。

笔者之前写过两篇绘制地图的文章,分别是用 matplotlib 画出中国疫情地图(附源码)用 Plotly 画出中国疫情地图(附源码),今天就介绍一下用pyecharts画地图的方法。之前公众号还发过一篇文章叫用 Python 做一个疫情大屏(优化版),写的是用echarts+flask来构建实时动态地图,这是一个很赞的想法,而笔者今天写的pyecharts就是基于echarts。

之前笔者写过Plotly画图的那篇文章中,笔者曾提过plotly是一个基于D3.js的Python库,plotly相当于一个操作层,让用户能用Python的方式操作D3,这对于不会JavaScript的用户是一个很大的便利。而今天介绍的pyecharts和plotly类似,也是用Python的方式来操作echarts,而echarts是和D3类似的一个js图库,其和D3功能上类似,但却是咱们中国人自己开发的(百度开发的),笔者写这篇文章的主要目的之一也是要介绍一下咱们自己的echarts/pyecharts。

下面就介绍一下如何用pyecharts绘制全国疫情地图。刚开始先给大家提个醒,安装pyecharts要用pip install pyecharts命令,目前暂不支持anaconda的conda install命令,笔者用的是anaconda最新版。

首先导入需要的包和准备数据。

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

nums = [5998913281257117210079829336295535435084643873333022922422401721631461301271219189767370612218101]
provinces = ['湖北''广东''河南''浙江''湖南''安徽''江西''江苏''重庆''山东''四川''黑龙江''北京''上海''河北''福建''广西''陕西''云南''海南''贵州''山西''天津''辽宁''甘肃''吉林''新疆''内蒙古''宁夏''香港''台湾''青海''澳门''西藏']
sequence = [(a,b) for a,b in zip(provinces,nums)]

这里有3个变量,nums是全国各省确诊人数,provinces是各省名称,sequence是将两者对应起来的一个list。接下来就是绘图部分。

mymap = Map()
mymap.add(series_name='中国最新疫情地图', data_pair=sequence, maptype='china')
mymap.set_global_opts(
            visualmap_opts=opts.VisualMapOpts(pieces=[
                                        {"min"1"max"9"label""1-9""color"'lightcoral'},
                                        {"min"10"max"99"label""10-99""color"'indianred'},
                                        {"min"100"max":999"label""100-999""color"'brown'},
                                        {"min"1000"max"9999"label""1000-9999""color"'firebrick'},
                                        {"min"10000"max"60000"label""≥10000""color":  'darkred'}],
                                        is_piecewise=True)
        )

mymap.render('render.html')

OK了,是不是so easy。我们可以看到pyecharts和plotly类似,甚至更简单,其自带中国地图数据,不需要额外的地理(坐标)数据,而plotly则需要(上一篇文章中,plotly需要一个json格式的地理文件),当然pyecharts也支持json地理数据,比如本例中我们可以用mymap.add_coordinate_json(‘放入相关数据’)来读取地理数据。这里有几点要说明一下,首先是地图的变量名不要用map,因为这是Python自带的关键字,容易出错。其次是visualmap_opts=opts.VisualMapOpts(pieces=[...])这一大堆,在官方文档中并未说明opts.VisualMapOpts的具体用法,其有很多参数,pieces只是其中之一,这部分用法需要大家认真研究一下,这部分用法我在官方文档中都没搞清楚,还是后来百度一下,才从别人的例子中了解了。最后就是mymap.render('render.html')会生成一个网页文件,打开这个网页就能看到我们绘制的图片,是交互式的,pyecharts是可以生成静态图片的(具体方法留给大家自己去学习),但生成网页文件可以更好地交互操作。下面把pyecharts绘制的图片和百度官方原图对比一下,两者都是GIF动图。

图1. pyecharts绘制的图片

图2. 百度官方原图

笔者目前已经写了3篇绘制地图的文章了,现在做一个小小的总结吧。我们把每种方法的评价分为好、中、差三个档次,我个人对这3中方法的具体评价如下图。在图中我对pyecharts给了很高的评价,但其官方文档有待改进,因为这个项目目前仅有3个人在维持,希望有热情和时间的开发者能多贡献自己的一份力量,尤其是咱们中国自己的开发项目。

图3. Python的3种绘图方法对比

除了这3种方法,Python还有其他很多好的绘制地图的方法,比如folium、geopandas以及非常出名的bokeh,这些也就留给大家自己去学习吧。最后还是那句话吧,“武汉加油,中国加油!”。

赞 赏 作 者



Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台,与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员,会员来自以工信部、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机构以及海内外知名公司,全平台近20万开发者关注。


扫码关注下方公众号后回复“疫情”即可获取源码数据


▼ 点击成为社区注册会员      喜欢文章,点个在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存