python数据可视化神器:pyecharts完全指南
Python数据可视化神器:pyecharts完全指南
1 概述:数据可视化的Python利器
pyecharts是一个基于Echarts的Python可视化库,它能够轻松创建交互式图表。Echarts是百度开源的一个数据可视化JS库,而pyecharts则让Python开发者能够利用Python语言直接生成Echarts图表。通过与Python对接,pyecharts显著简化了动态图表生成过程,特别适合在Python环境中进行数据可视化操作。
与matplotlib等其他可视化库相比,pyecharts具有以下优势:
- 简洁的API设计:支持链式调用,使代码编写更加流畅直观
- 丰富的图表类型:提供30多种常见图表,满足各种可视化需求
- 强大的Web集成能力:可轻松集成到Flask、Django等主流Web框架中
- 卓越的交互性:生成的图表支持丰富的交互操作
- 地理数据可视化:内置400多个地图文件,为地理数据可视化提供强力支持
2 安装与配置
2.1 安装pyecharts
使用pip可以轻松安装pyecharts:
pip install pyecharts
如果需要安装特定版本,可以指定版本号:
pip install pyecharts==2.0.8
2.2 检查安装
安装完成后,可以通过以下代码验证安装是否成功:
import pyecharts
print(pyecharts.__version__)
3 基础图表绘制
3.1 柱状图
柱状图是数据可视化中最常用的图表类型之一,用于比较不同类别的数据。
from pyecharts.charts import Bar
from pyecharts import options as opts
# 创建柱状图
bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [114, 55, 27, 101, 125, 27])
bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60])
bar.set_global_opts(title_opts=opts.TitleOpts(title="销售情况对比", subtitle="商家A vs 商家B"))
# 生成HTML文件
bar.render("bar_chart.html")
代码解释:
Bar():创建柱状图实例add_xaxis():添加横轴数据add_yaxis():添加纵轴数据,可以添加多个数据系列set_global_opts():设置全局配置选项,包括标题、坐标轴等render():生成HTML文件,可在浏览器中查看
链式调用写法:
pyecharts支持链式调用,使代码更加简洁:
bar = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60])
.set_global_opts(title_opts=opts.TitleOpts(title="销售情况对比", subtitle="商家A vs 商家B"))
)
bar.render("bar_chart.html")
3.2 折线图
折线图适用于展示数据随时间或其他连续变量的变化趋势。
from pyecharts.charts import Line
# 创建折线图
line = (
Line()
.add_xaxis(['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu'])
.add_yaxis('销量', [123, 153, 89, 107, 98, 23])
.set_global_opts(
title_opts=opts.TitleOpts(title="手机品牌销量"),
legend_opts=opts.LegendOpts(is_show=True),
tooltip_opts=opts.TooltipOpts(trigger="axis")
)
)
line.render("line_chart.html")
3.3 饼图
饼图适用于展示各部分占整体的比例关系。
基础饼图
from pyecharts.charts import Pie
# 创建饼图
data = {"奔驰": 32000, "奥迪": 28000, "宝马": 30000, "雷克萨斯": 12000, "沃尔沃": 14400}
pie = (
Pie()
.add("", [list(x) for x in zip(data.keys(), data.values())])
.set_global_opts(title_opts=opts.TitleOpts(title="汽车品牌销量占比"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"))
)
pie.render("pie_chart.html")
圆环图
def pie_custom_radius():
data = {"奔驰":32000, "奥迪":28000, "宝马":30000, "雷克萨斯":12000, "沃尔沃":14400}
pie = Pie(init_opts=opts.InitOpts(theme='light',
width='1200px',
height='720px'))
pie.add("", [list(x) for x in zip(data.keys(), data.values())],
radius=["30%", "80%"]) # 设置内外半径,形成圆环
return pie
chart = pie_custom_radius()
chart.render("donut_chart.html")
代码解释:
radius=["30%", "80%"]:设置饼图的内外半径,当内半径大于0%时,形成圆环图formatter="{b}: {c} ({d}%)":设置标签格式,显示名称、数值和百分比
4 高级图表与地图可视化
4.1 堆叠柱状图
堆叠柱状图适用于展示多个数据系列并且看总和的场景。
from pyecharts.charts import Bar
from pyecharts import options as opts
x_attr = ['朗逸', '帕萨特', '途观', '途昂', '凌渡', '途安']
data1 = [28000, 9000, 7500, 6000, 4800, 3600] # 一月份数据
data2 = [32000, 12000, 10800, 7500, 6000, 3000] # 二月份数据
bar = Bar()
bar.add_xaxis(x_attr)
# 使用stack参数将数据系列堆叠
bar.add_yaxis('一月份', data1, stack="stack1")
bar.add_yaxis('二月份', data2, stack="stack1")
bar.set_global_opts(title_opts=opts.TitleOpts(title="上汽大众", subtitle="上汽大众1-2月份车型销量"))
bar.render("stacked_bar.html")
4.2 地图可视化
pyecharts提供了强大的地理数据可视化功能,支持中国地图、世界地图及400多个地区的地图。
中国地图
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.faker import Faker
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-中国地图"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
c.render("china_map.html")
分段型中国地图
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="销售数据分段展示"),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
)
)
c.render("piecewise_map.html")
世界地图
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.country, Faker.values())], "world")
.set_global_opts(
title_opts=opts.TitleOpts(title="世界地图"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
c.render("world_map.html")
代码解释:
maptype="china"或maptype="world":指定地图类型is_piecewise=True:将连续型视觉映射转换为分段型Faker.provinces和Faker.values():使用Faker提供的模拟数据
5 图表配置与自定义
5.1 全局配置选项
pyecharts提供了丰富的配置选项,可以自定义图表的外观和交互行为。
from pyecharts.charts import Bar
from pyecharts import options as opts
bar = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60])
.set_global_opts(
# 标题配置
title_opts=opts.TitleOpts(
title="主标题",
subtitle="副标题",
title_textstyle_opts=opts.TextStyleOpts(color="red")
),
# 图例配置
legend_opts=opts.LegendOpts(
pos_left="right",
orient="vertical"
),
# 工具栏配置
toolbox_opts=opts.ToolboxOpts(
is_show=True,
feature={
"saveAsImage": {}, # 保存为图片
"restore": {}, # 还原
"dataView": {} # 数据视图
}
),
# 提示框配置
tooltip_opts=opts.TooltipOpts(
trigger="axis",
axis_pointer_type="cross"
),
# 视觉映射配置
visualmap_opts=opts.VisualMapOpts(
dimension=0,
min_=0,
max_=150
)
)
)
bar.render("customized_bar.html")
5.2 系列配置选项
系列配置选项允许对每个数据系列进行个性化设置。
from pyecharts.charts import Line
line = (
Line()
.add_xaxis(['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu'])
.add_yaxis(
series_name="销量",
y_axis=[123, 153, 89, 107, 98, 23],
# 系列配置
label_opts=opts.LabelOpts(is_show=True),
linestyle_opts=opts.LineStyleOpts(width=3),
itemstyle_opts=opts.ItemStyleOpts(color="#d14a61"),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值")
]
),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_="average", name="平均值")]
)
)
.set_global_opts(
title_opts=opts.TitleOpts(title="手机销量趋势")
)
)
line.render("customized_line.html")
6 集成与部署
6.1 在Jupyter Notebook中使用
pyecharts完美支持Jupyter Notebook环境,可以直接在notebook中显示图表。
from pyecharts.charts import Bar
from pyecharts import options as opts
bar = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60])
.set_global_opts(title_opts=opts.TitleOpts(title="Jupyter中显示的柱状图"))
)
# 在Jupyter Notebook中直接显示
bar.render_notebook()
6.2 在Web框架中使用
pyecharts可以轻松集成到Flask、Django等Web框架中。
Flask集成示例
from flask import Flask
from pyecharts.charts import Bar
from pyecharts import options as opts
app = Flask(__name__)
def create_bar_chart():
bar = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60])
.set_global_opts(title_opts=opts.TitleOpts(title="Flask集成示例"))
)
return bar
@app.route("/")
def index():
bar = create_bar_chart()
return bar.render_embed()
if __name__ == "__main__":
app.run()
6.3 解决图表显示问题
在某些环境下,可能会遇到图表无法正常显示的问题,可以通过设置本地资源来解决。
from pyecharts.globals import CurrentConfig
# 设置本地资源路径
CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/"
# 然后正常创建图表
from pyecharts.charts import Bar
bar = Bar()
# ... 添加数据和配置
bar.render("chart.html")
7 总结
pyecharts作为一个功能强大的Python数据可视化库,具有以下突出特点:
-
丰富的图表类型:支持30多种常见图表,包括柱状图、折线图、饼图、散点图、地图等,满足各种数据可视化需求。
-
灵活的配置选项:提供了高度灵活的配置项,可以轻松搭配出精美的图表,支持全局配置和系列配置。
-
强大的地理可视化:内置400多个地图文件,支持中国地图、世界地图及各级区域地图,为地理数据可视化提供强力支持。
-
卓越的交互体验:生成的图表具有丰富的交互功能,如提示框、数据区域缩放、图例开关等。
-
便捷的集成能力:可以轻松集成到Jupyter Notebook、Flask、Django等各种环境中。
-
简洁的API设计:支持链式调用,使代码编写更加直观和简洁。
通过本文的介绍和示例,相信读者已经对pyecharts有了全面的了解,并能够开始使用它创建令人印象深刻的数据可视化作品。无论是简单的柱状图还是复杂的交互式地图,pyecharts都能提供强大的支持,帮助你将数据转化为直观、易懂的视觉形式。
随着数据在各行各业中的重要性日益增强,掌握像pyecharts这样的数据可视化工具将成为每个数据工作者和开发者的必备技能。希望本篇博客能为你的数据可视化之旅提供一个良好的起点!
更多推荐

所有评论(0)