Py学习  »  Python

Python:绘制动态地图-pyecharts

连享会 • 1 年前 • 483 次点击  

👇 连享会 · 推文导航 | www.lianxh.cn

连享会课程 · 2024 五一论文班

作者:王卓 (合肥工业大学)
邮箱:2020171526@mail.hfut.edu.cn


目录

  • 1. 简介

  • 2. pyecharts 库介绍

    • 2.1 pyecharts 库的安装

    • 2.2 pyecharts 库配置一览

  • 3. 案例操作

  • 4. 参考资料

  • 5. 相关推文



温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:

1. 简介

许多软件可以绘制精美的图表,例如 Stata 、ACGIS、Excel 等等,但这些软件呈现的图表大都以静态为主。在本文中,我们将介绍百度的 Python 开源画图工具——pyecharts,它除了可以画出很酷炫的动态图表外,还可以画出动态地图、卫星地图。本文将以绘制各地上市公司数量为例,来演示 Python 绘制动态地图。

  • 本案例中均使用 Python 语言,适用于习惯使用 Python 的读者进行阅读;
  • 本文对 pyecharts 的操作较为简单,对图表美化要求更高的读者,可参考官网介绍。

2. pyecharts 库介绍

pyecharts 是基于 Python 语言和百度开源 Echarts 产生的数据可视化工具。它巧妙的结合了 Python 强大的数据处理、数据分析能力和 Echarts 良好的交互性、精巧的图表设计能力。

pyecharts 库 API 设计简单,可读性强,支持链式调用。该库涵盖了 30 多种常见图表,且配置高度灵活,可轻松搭配出精美的图表。目前,该库版本支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab,新版 V1 仅支持 Python3.6+ 配置。

2.1 pyecharts 库的安装

  • 方法一:pip 安装
pip install pyecharts
  • 方法二:源码安装
git clone https://github.com/pyecharts/pyecharts.git
cd pyecharts                    # 放入默认的 Python 第三方库文件夹中
pip install -r requirements.txt # 在cmd中输入
python setup.py install
# 或者执行 python install.py

2.2 pyecharts 库配置一览

如上图所示,pyecharts 主要有 6 个全局环境配置项,通过 set_global_opts() 方法设置。详细的系列配置项,可参考「官方文档」。

3. 案例操作

本实例以绘制上市公司所在城市地图演示 pyecharts 的基本应用,其中数据获取方式为调用「Tushare」大数据 API。具体可分为以下几步:

  • 第一步:导入第三方库
import pandas as pd  
import numpy as np
from scipy import stats
import tushare as ts 
import matplotlib.pyplot as plt

# 正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False

from pyecharts import options as opts
from pyecharts.charts import Map # 地图库
  • 第二步:调取上市公司基本数据,并计算每个城市有多少个上市公司
pro = ts.pro_api()
df1 = pro.stock_company(exchange='SZSE', fields='ts_code,province,city')
df2 = pro.stock_company(exchange='SSE', fields='ts_code,province,city')
basics_data = pd.concat([df1,df2])
city_firm = basics_data.groupby('city')['ts_code'].count().reset_index()
city_firm.columns = ['city','firm']

# 当没有权限时,可使用如下方式获取
# url = 'https://file.lianxh.cn/data/c/company.xlsx'
# basics_data = pd.read_excel(url)
# city_firm = basics_data.groupby('city')['code'].count().reset_index()
# city_firm.columns = ['city','firm']
  • 第三步:清洗上市公司所在地
# 由于百度地图的城市名不包含 “市”、“地区”、“自治州” 等字段,需要删除
import re
city_firm['city'] = city_firm.city.map(lambda x: re.sub('市',"",x))
city_firm['city'] = city_firm.city.map(lambda x: re.sub('地区',"",x))
city_firm['city'] = city_firm.city.map(lambda x: re.sub('盟',"",x))
city_firm['city'] = city_firm.city.map(lambda x: re.sub('.*?族',"",x))
city_firm['city'] = city_firm.city.map(lambda x: re.sub('自治州',"",x))
  • 第四步:画图
# 各城市上市公司数量图
city = city_firm['city'].values.tolist() 
cfirm = city_firm['firm'].values.tolist() # 将城市和公司数量转为list格式方便画图

map = Map()
map.add("", [list(z) for z in zip(city, cfirm)],
       'china-cities',
       label_opts=opts.LabelOpts(is_show=False),
       is_map_symbol_show=False,
       )
map.set_global_opts(
    title_opts=opts.TitleOpts(title="中国上市公司分布"),
    visualmap_opts=opts.VisualMapOpts(min_=min(cfirm),max_=max(cfirm),is_piecewise=True,
                  range_color=["#E0ECF8""#045FB4"],
                  pieces=[{"min":1,"max":50,"label":"<50"},{"min":50,"max":100,"label":"50-100"},
                          {"min":100,"max":200,"label":"100-200"},{"min":200,"max":300,"label":"200-300"},
                          {"min":300,"label":">300"}]),
    )
# min\max 表示图例的最大最小值;is_piecewise表示地图分割 ;
# range_color是HTML色彩代码,可以去搜索自己需要的颜色用来表示数值深浅;
# pieces表示图例的数字区间

map.render_notebook()

经过上述操作后,动态地图就画好了!在鼠标滑动各个地区时,会有数量显示。但是城市地图可能并不完整,大家可以参考网上相关方法补全,或者以省份地图代替。

# 各省份上市公司数量图
url = 'https://file.lianxh.cn/data/c/company.xlsx'
basics_data = pd.read_excel(url)
province_firm = basics_data.groupby('province')['code'].count().reset_index()
province_firm.columns = ['province','firm']

import re
province_firm['province'] = province_firm.province.map(lambda x: re.sub('自治区',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('维吾尔自治区',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('壮族自治区',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('回族自治区',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('省',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('市',"",x))

province = province_firm['province'].values.tolist() 
pfirm = province_firm['firm'].values.tolist() # 将城市和公司数量转为list格式方便画图
map = Map()
map.add("", [list(z) for z in zip(province, pfirm)],
       'china',
       label_opts=opts.LabelOpts(is_show=False),
       is_map_symbol_show=False,
       )
map.set_global_opts(
    title_opts=opts.TitleOpts(title="中国上市公司分布"),
    visualmap_opts=opts.VisualMapOpts(min_=min(pfirm),max_=max(pfirm),is_piecewise=True,
                  range_color=["#E0ECF8""#045FB4"],
                  pieces=[{"min":1,"max":50,"label":"<50"},{"min":50,"max":100,"label":"50-100"},
                          {"min":100,"max":200,"label":"100-200"},{"min":200,"max":300,"label":"200-300"},
                          {"min":300,"label":">300"}]),
    )
# min\max 表示图例的最大最小值;is_piecewise表示地图分割 ;
# range_color是HTML色彩代码,可以去搜索自己需要的颜色用来表示数值深浅;
# pieces表示图例的数字区间
map.render_notebook()

上述只是 pyecharts 的简单操作,它还可以通过更加复杂的设置画出叠加的、可变化的动态图,比如绘制过去 10 年的各个城市的 GDP 的变化和增长等。

4. 参考资料

  • pyecharts 官方网站
  • HTML 色彩代码官方网站

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 地图, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

  • 专题:Stata命令
    • Stata:空间计量之用-spmap-绘制地图.md
  • 专题:Stata绘图
    • Stata绘图:世行可视化案例-条形图-密度函数图-地图-断点回归图-散点图
  • 专题:空间计量
    • Stata:我和她离多远?基于百度地图API的地理距离计算
    • GIS地图制作栅格计算器的应用

New! Stata 搜索神器:lianxh 和 songbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
  . ssc install lianxh
  . ssc install songbl
👉  使用:
  . lianxh DID 倍分法
  . songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/169635
 
483 次点击