👇 连享会 · 推文导航 | 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 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. 参考资料
5. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 地图, m
安装最新版 lianxh
命令:
ssc install lianxh, replace
- Stata:空间计量之用-spmap-绘制地图.md
- Stata绘图:世行可视化案例-条形图-密度函数图-地图-断点回归图-散点图
- Stata:我和她离多远?基于百度地图API的地理距离计算