社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python:绘制动态地图-pyecharts

连享会 • 6 月前 • 203 次点击  

👇 连享会 · 推文导航 | 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/170932
 
203 次点击