Python 数据可视化 pyecharts 使用详解:从安装到实战
本文详细介绍 Python 库 pyecharts 的安装配置与核心用法。涵盖柱状图、饼图、词云及地理坐标系等多种图表类型的代码示例,重点解析地图缺失坐标的四种解决方案,并对比 Python 2/3 编码处理差异,帮助开发者快速掌握高效的数据可视化技能。
pyecharts 简介与安装
pyecharts 是什么?
pyecharts 是一个用于生成 Echarts 图表的 Python 类库。
Echarts 是百度开源的数据可视化 JavaScript 库,专注于数据展示。pyecharts 实现了 Echarts 与 Python 的对接,使得在 Python 环境中也能轻松生成高质量的可视化图表。
通过 pyecharts 生成的图表可以保存为独立的网页文件,同时也支持在 Flask、Django 等 Web 框架中集成使用,方便嵌入动态网页应用。
pyecharts 支持的图表类型
- Bar(柱状图/条形图)
- Bar3D(3D 柱状图)
- Boxplot(箱形图)
- EffectScatter(带有涟漪特效动画的散点图)
- Funnel(漏斗图)
- Gauge(仪表盘)
- Geo(地理坐标系)
- Graph(关系图)
- HeatMap(热力图)
- Kline(K线图)
- Line(折线/面积图)
- Line3D(3D 折线图)
- Liquid(水球图)
- Map(地图)
- Parallel(平行坐标系)
- Pie(饼图)
- Polar(极坐标系)
- Radar(雷达图)
- Sankey(桑基图)
- Scatter(散点图)
- Scatter3D(3D 散点图)
- ThemeRiver(主题河流图)
- WordCloud(词云图)
用户自定义
- Grid 类:并行显示多张图
- Overlap 类:结合不同类型图表叠加画在同张图上
- Page 类:同一网页按顺序展示多图
- Timeline 类:提供时间线轮播多张图
安装指南与地图依赖
pyecharts 安装指南
pip install pyecharts
需要特别说明的是,自 0.3.2 版本起,为了减小项目体积并保持轻量化,pyecharts 不再内置地图 JavaScript 文件。如果需要使用 Geo 或 Map 等涉及地图的图表,用户必须自行安装对应的地图数据包。
否则,在调用相关功能时可能无法完整显示地图效果。
全球国家地图: echarts-countries-pypkg (1.9MB):包含世界地图及 213 个国家的数据,其中包括中国地图。
中国省级地图: echarts-china-provinces-pypkg (730KB):涵盖 23 个省和 5 个自治区。
中国市级地图: echarts-china-cities-pypkg (3.8MB):包含 370 个中国城市数据。
在 Windows 系统下,可通过以下 pip 命令进行安装:
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
在 Linux 系统下,可通过以下 pip 命令进行安装:
sudo pip3 install echarts-countries-pypkg
sudo pip3 install echarts-china-provinces-pypkg
sudo pip3 install echarts-china-cities-pypkg
sudo pip3 install echarts-countries-pypkg
sudo pip3 install echarts-china-provinces-pypkg
sudo pip3 install echarts-china-cities-pypkg
核心函数与绘制流程
相关函数与参数说明
首先介绍一些常用的基本函数:
- add():核心方法,用于添加图表数据及设置各类配置项。
- show_config():打印输出图表的所有配置项信息。
- render():默认在根目录下生成 render.html 文件。支持传入 path 参数指定保存位置,例如 render(r"e:my_first_chart.html"),生成后可用浏览器打开查看。
默认编码类型为 UTF-8,在 Python 3 中处理中文通常没有问题,因为 Python 3 对中文支持较好。但在 Python 2 中,编码处理较为复杂,目前尚无完美解决方案。建议通过文本编辑器(如 Visual Studio Code)先用 GBK 编码重新打开文件,再用 UTF-8 重新保存,这样用浏览器打开时即可避免中文乱码问题。(此部分为参考其他用户遇到的问题整理,供读者参考。)
基本上所有图表类型的绘制流程如下:
- chart_name = Type():初始化具体类型的图表对象。
- add():添加数据及配置项。
- render():生成 .html 文件。
常见图表类型实例
基本图表使用实例
Bar(柱状图/条形图)
from pyecharts import Bar
bar =Bar("我的第一个图表", "这里是副标题")
bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90])
bar.show_config()
bar.render()

from pyecharts import Bar
bar =Bar("x 轴和 y 轴交换")
bar.add("商家A", attr, v1)
bar.add("商家B", attr, v2, is_convert=True)
bar.render()

说明:如下代码中,atf_tb1 属性并不会显示在最终图表中。
bar = Bar()
bar.add('格式化',["atf_tb1","shop"],[10,50])
bar.add("范围", ["shop"], [120])
bar.render()


可以看到 atf_tb1 并未加载到图表中,说明不支持这种使用方式。
Pie(饼图)
from pyecharts import Pie
attr =["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 =[11, 12, 13, 10, 10, 10]
pie =Pie("饼图示例")
pie.add("", attr, v1, is_label_show=True)
pie.show_config()
pie.render()

WordCloud(词云图)
from pyecharts import WordCloud
name =['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications', 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']
value =[10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]
wordcloud =WordCloud(width=1300, height=620)
wordcloud.add("", name, value, word_size_range=[20, 100])
wordcloud.show_config()
wordcloud.render()

词云图的形状可以通过 shape 参数进行选择。
wordcloud =WordCloud(width=1300, height=620)
wordcloud.add("", name, value, word_size_range=[30, 100], shape='diamond')
wordcloud.show_config()
wordcloud.render()

地理坐标系常见问题解决
Geo(地理坐标系)
from pyecharts import Geo
data =[("海门", 9), ("鄂尔多斯", 12), ("招远", 12), ("舟山", 12), ("齐齐哈尔", 14), ("盐城", 15)]
geo =Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", width=1200, height=600, background_color='#404a59')
attr, value =geo.cast(data)
geo.add("", attr, value, type="effectScatter", is_random=True, effect_scale=5)
geo.show_config()
geo.render()
这里需要预先说明:由于 Echarts 内置的地点数据有限,如果添加了不存在的地点,将会生成一个空图。
针对此问题,有四种解决办法:
第一种是最简单的方法,直接删除不存在的地点数据。
第二种是前往百度地图 API 查找找不到地方的经纬度,并将其添加到原始包中(具体方法可参考相关博客:https://www.jb51.net/article/163958.htm)。
第三种是如果数据中的城市在地图中没有坐标,可以通过 geo_cities_coords 参数手动添加坐标,GeoLine 图表同样适用此方法。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: jyroy
from pyecharts import Geo
if __name__ == '__main__':
list_city_name=["100,30-1","130,40-2"]
list_num = [["value1","value2"],["value3"]]
geo_cities_coords = {"100,30-1":[100,30],"130,40-2":[130,40]}
geo = Geo("Geo 实例")
geo.add("",list_city_name, list_num, geo_cities_coords=geo_cities_coords)
geo.render()

第四种是批量导入数据(例如从数据库读取)时,如果不想将异常数据插入地图,可以通过 try...except... 结构过滤掉少量异常数据。以下代码是我遇到该问题时提出的解决方案,data 是从数据库中获取的字典数据。
当然,如果数据量较大,这种做法效率可能不高,仅供参考。
for n, m in data.items(): #data是我从数据库中读取的城市的字典数据
list_1 = []
list_2 = []
list_1.append(n)
list_2.append(m)
try:
geo.add("", list_1, list_2, visual_range=[0, 3000], visual_text_color="#fff", symbol_size=15, is_visualmap=True)
except Exception as e:
pass
当然,如果数据量较大,这种做法效率可能不高,仅供参考。这是我项目中部分数据得到的结果,我使用了 7 万多条数据进行测试,感觉效果还可以。

Line(折线/面积图)
from pyecharts import Line
attr =["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 =[5, 20, 36, 10, 10, 100]v2 =[55, 60, 16, 20, 15, 80]
line =Line("折线图示例")
line.add("商家A", attr, v1, mark_point=["average"])
line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"])
line.show_config()
line.render()

line =Line("折线图-面积图示例")
line.add("商家A", attr, v1, is_fill=True, line_opacity=0.2, area_opacity=0.4, symbol=None)
line.add("商家B", attr, v2, is_fill=True, area_color='#000', area_opacity=0.3, is_smooth=True)
line.show_config()
line.render()

总结与建议
写在后面
由于我在实际使用中主要结合数据库进行批量处理,因此未列出全部代码。仅在地图部分的第三个解决办法中展示了一部分我的代码,其余均为网上常见的测试用例。
以上为基础介绍(我认为常用的一些图表)。如果想了解更多关于 pyecharts 的内容,不推荐其他博客,因为内容大同小异。建议大家移步官网 http://pyecharts.org/#/zh-cn/,因为这是一个开源项目,由三人持续维护,官网内容非常丰富且提供中文版。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













