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.provincesFaker.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数据可视化库,具有以下突出特点:

  1. 丰富的图表类型:支持30多种常见图表,包括柱状图、折线图、饼图、散点图、地图等,满足各种数据可视化需求。

  2. 灵活的配置选项:提供了高度灵活的配置项,可以轻松搭配出精美的图表,支持全局配置和系列配置。

  3. 强大的地理可视化:内置400多个地图文件,支持中国地图、世界地图及各级区域地图,为地理数据可视化提供强力支持。

  4. 卓越的交互体验:生成的图表具有丰富的交互功能,如提示框、数据区域缩放、图例开关等。

  5. 便捷的集成能力:可以轻松集成到Jupyter Notebook、Flask、Django等各种环境中。

  6. 简洁的API设计:支持链式调用,使代码编写更加直观和简洁。

通过本文的介绍和示例,相信读者已经对pyecharts有了全面的了解,并能够开始使用它创建令人印象深刻的数据可视化作品。无论是简单的柱状图还是复杂的交互式地图,pyecharts都能提供强大的支持,帮助你将数据转化为直观、易懂的视觉形式。

随着数据在各行各业中的重要性日益增强,掌握像pyecharts这样的数据可视化工具将成为每个数据工作者和开发者的必备技能。希望本篇博客能为你的数据可视化之旅提供一个良好的起点!

更多推荐