用 pyecharts 让数据可视化更生动

Pyecharts 背景介绍

在当今大数据时代,数据可视化已经成为信息表达的重要方式。无论是商业分析、科研探索,还是 Web 应用展示,直观的图表总能让数据讲述更生动的故事。而在 Python 生态中,Pyecharts 是一个强大且易用的数据可视化库,它基于 ECharts,提供了丰富的可视化组件,支持折线图、柱状图、饼图、地图等多种图表类型,且能够方便地集成到 Web 端和 Jupyter Notebook 中。

对于想要用 Python 实现高质量可视化的开发者来说,Pyecharts 是一个不错的选择。它不仅封装了强大的 ECharts 功能,还让复杂的交互图表变得更加简单。本文将介绍 Pyecharts 的核心功能,并通过示例展示如何使用它进行数据可视化,让你的数据更具表现力!

从官网的介绍来看,pyecharts 有以下诸多特性:

  1. 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
  2. 囊括了 30+ 种常见图表,应有尽有
  3. 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
  4. 可轻松集成至 Flask,Django 等主流 Web 框架
  5. 高度灵活的配置项,可轻松搭配出精美的图表
  6. 详细的文档和示例,帮助开发者更快的上手项目
  7. 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持

并且可以通过 pip 安装源码安装两种方式来安装 pyecharts:

# 安装 v2 以上版本
$ pip install pyecharts -U

# 安装 v2 以上版本
$ git clone https://github.com/pyecharts/pyecharts.git

从 GitHub 的 pyecharts 官网来看,安装好 pyecharts 之后,就可以进行代码的运行,并可以在浏览器中看到数据可视化的效果。

from pyecharts.charts import Bar
from pyecharts import options as opts

# V1 版本开始支持链式调用
bar = (
    Bar()
    .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
    .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
    .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
    .set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"))
)
bar.render()

通过生成的 render.html 文件,点开之后就可以看到柱状图的可视化效果。

同样的,在 Jupyter Notes 中也可以直接呈现出这些效果。另外,在 pyecharts 的图表类型里面,绝对不仅仅局限于柱状图,折线图、饼图、散点图都可以做出来。详情可以参见表格:

图表类型适用场景
柱状图(Bar)适用于分类数据的对比,如销售数据、人口分布
折线图(Line)适用于趋势分析,如股票价格、温度变化
饼图(Pie)适用于数据占比展示,如市场份额、人口构成
散点图(Scatter)适用于数据分布分析,如身高体重关系、房价分布
地图(Map)适用于地理数据可视化,如人口分布、疫情数据
热力图(Heatmap)适用于二维数据分析,如温度分布、访问热度
词云(WordCloud)适用于文本数据分析,如关键词分析
箱线图(Box Plot)数据分布分析、离群值检测、统计描述。展示数据的最大值、最小值、中位数、四分位数及异常值,帮助识别数据的离散性和分布情况。
仪表盘(Gauge)实时监控、KPI展示、进度追踪。适用于实时数据展示,显示目标进度或某项指标的当前状态。
漏斗图(Funnel)销售漏斗、转化率分析、用户行为分析。用于展示数据流的逐步转化过程,适合分析各阶段转化情况。
树图(Tree)组织结构、层级关系、分类展示。适用于展示层级结构,如公司组织架构、文件目录等。
平行坐标系图(Parallel Coordinates)多维数据分析、机器学习特征分析。用于展示多维数据的关系,适合高维数据的可视化,如特征对比分析。
桑基图(Sankey Diagram)数据流、能源流、资金流、转化流。展示不同阶段之间的数据流动和流量,适合展示数据的流向。
地理坐标系图(Geo)地理数据展示、区域分布、人口分布。适合展示地理位置相关的数据,如城市人口、区域销售数据等。
时间线图(Timeline)动态数据展示、时间序列分析、趋势展示。适用于随着时间变化的数据可视化,展示历史数据的变化趋势。
3D 散点图(3D Scatter)三维数据展示、空间数据分析。用于展示三维空间中的数据点,适合显示三维数据分布。
3D 柱状图(3D Bar)三维数据展示、空间分析。通过三维柱状图展示多维数据的对比,适合空间或高维数据展示。
3D 曲面图(3D Surface)三维曲面展示、空间数据分析。适用于展示三维空间中的连续数据关系,如科学计算中的曲面拟合。

基础图表介绍

柱状图(Bar Chart)使用介绍

柱状图(Bar Chart)是最常见的图表类型之一,适用于展示不同类别之间的数量对比。它通过竖直或水平的条形来表示每个类别的数值大小,帮助我们快速识别出数据中的差异和趋势。

代码示例

from pyecharts.charts import Bar
from pyecharts import options as opts

# 创建柱状图对象
bar = Bar()

# 链式调用进行配置
bar.add_xaxis(["A", "B", "C", "D", "E"])  # 设置x轴类别
bar.add_yaxis("销量", [120, 200, 150, 80, 70])  # 设置y轴数据

# 设置全局配置
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="销售数据", subtitle="2023年上半年"),
    xaxis_opts=opts.AxisOpts(name="商品"),
    yaxis_opts=opts.AxisOpts(name="销量")
)

# 渲染生成图表
bar.render()

代码解析

  • Bar():创建一个柱状图对象。
  • add_xaxis(["A", "B", "C", "D", "E"]):设置 x 轴的类别,通常是你想要展示的各个分类(如商品、地区等)。
  • add_yaxis("销量", [120, 200, 150, 80, 70]):设置 y 轴的数据,即每个分类的数值。
  • set_global_opts():用来设置图表的全局配置项,包括标题、x 轴和 y 轴的名称等。这里使用了链式调用来逐一设置标题、x 轴和 y 轴的配置。
  • render():将图表渲染成 HTML 文件,方便在浏览器中查看。

运行上述代码后,会在当前目录下生成一个 render.html 文件,打开该文件可以看到柱状图的展示效果。该柱状图展示了商品 A、B、C、D、E 的销量数据,且带有标题和坐标轴名称。

除了基础配置,Pyecharts 还支持进一步定制柱状图的外观,例如设置柱子的颜色、添加图例、调整样式等。下面是一个进阶的示例,展示了如何进行更多的自定义。

from pyecharts.charts import Bar
from pyecharts import options as opts

# 创建柱状图对象
bar = Bar()

# 链式调用进行配置
bar.add_xaxis(["A", "B", "C", "D", "E"])  # 设置x轴类别
bar.add_yaxis("销量", [120, 200, 150, 80, 70], color="skyblue")  # 设置y轴数据并调整颜色
bar.add_yaxis("利润", [50, 100, 70, 60, 90], color="orange")  # 添加另一组y轴数据

# 设置全局配置
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="销售数据", subtitle="2023年"),
    xaxis_opts=opts.AxisOpts(name="商品"),
    yaxis_opts=opts.AxisOpts(name="销量/利润"),
    legend_opts=opts.LegendOpts(pos_top="10%")  # 图例位置
)

# 渲染生成图表
bar.render("render_advanced.html")

代码解析

  • add_yaxis("销量", [120, 200, 150, 80, 70], color="skyblue"):为柱状图添加另一组数据,并设置柱子的颜色为“skyblue”。
  • add_yaxis("利润", [50, 100, 70, 60, 90], color="orange"):再次为柱状图添加一组数据,用于展示利润,颜色设置为“orange”。
  • legend_opts=opts.LegendOpts(pos_top="10%"):设置图例的位置,使其出现在图表的顶部。

用上述代码生成的图表如下所示:

折线图(Line Chart)使用介绍

折线图(Line Chart)是用于展示数据随时间变化趋势的常见图表类型。它通过将数据点连接成线段的方式,帮助用户识别数据变化的规律和趋势。折线图适用于时间序列数据、趋势分析、对比分析等场景。

在 Pyecharts 中,可以使用链式调用方式来非常方便地生成折线图,并进行多种定制化配置。

代码示例

from pyecharts.charts import Line
from pyecharts import options as opts

# 创建折线图对象
line = Line()

# 链式调用进行配置
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"])  # 设置x轴标签(月份)
line.add_yaxis("销量", [150, 200, 180, 220, 240, 280, 300])  # 设置y轴数据(销量)

# 设置全局配置
line.set_global_opts(
    title_opts=opts.TitleOpts(title="2023年上半年销量趋势"),
    xaxis_opts=opts.AxisOpts(name="月份"),
    yaxis_opts=opts.AxisOpts(name="销量"),
    tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line")  # 设置悬浮提示框
)

# 渲染生成图表
line.render()

代码解析

  • Line():创建一个折线图对象。
  • add_xaxis(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"]):设置 x 轴标签,这里是月份。
  • add_yaxis("销量", [150, 200, 180, 220, 240, 280, 300]):设置 y 轴数据,这里是每个月的销量数据。
  • set_global_opts():设置全局配置,包括图表的标题、坐标轴名称等。
    • title_opts=opts.TitleOpts(title="2023年上半年销量趋势"):设置图表的标题。
    • xaxis_opts=opts.AxisOpts(name="月份")yaxis_opts=opts.AxisOpts(name="销量"):设置 x 轴和 y 轴的名称。
    • tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line"):设置提示框,鼠标悬浮时会显示相应的数据。
  • render():生成 HTML 文件并渲染折线图,可以通过浏览器打开查看。

Pyecharts 还支持在同一个折线图中展示多条折线,适用于对比多个系列的数据。此外,还可以定制折线的颜色、线条样式、图例等。下面是一个进阶示例,展示了如何在折线图中绘制多条折线,并进行更多样式的自定义。

from pyecharts.charts import Line
from pyecharts import options as opts

# 创建折线图对象
line = Line()

# 添加x轴
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"])

# 添加销量数据线
line.add_yaxis("销量", [150, 200, 180, 220, 240, 280, 300], color="skyblue", is_smooth=True, linestyle_opts=opts.LineStyleOpts(width=2))

# 添加利润数据线
line.add_yaxis("利润", [50, 100, 70, 60, 90, 150, 200], color="orange", is_smooth=True, linestyle_opts=opts.LineStyleOpts(width=2, type_="dashed"))

# 设置全局配置
line.set_global_opts(
    title_opts=opts.TitleOpts(title="2023年上半年销售与利润趋势"),
    xaxis_opts=opts.AxisOpts(name="月份"),
    yaxis_opts=opts.AxisOpts(name="金额"),
    legend_opts=opts.LegendOpts(pos_top="5%"),  # 设置图例位置
    tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line")  # 提示框
)

# 渲染生成图表
line.render("render_advanced.html")

代码解析

  • is_smooth=True:使折线图的线条变得平滑,避免折线过于尖锐。
  • linestyle_opts=opts.LineStyleOpts(width=2):设置折线的宽度为 2。
  • color="skyblue"color="orange":分别为销量线和利润线设置不同的颜色。
  • type_="dashed":设置利润线为虚线样式。
  • legend_opts=opts.LegendOpts(pos_top="5%"):设置图例的位置为顶部。

使用上述配置,将得到一个包含两条折线的图表,分别表示“销量”和“利润”,并且每条折线有不同的颜色、样式和图例。生成的图表将帮助你更加清晰地对比不同指标之间的关系。

饼图(Pie Chart)使用介绍

饼图(Pie Chart)是一种常见的统计图表,用于展示数据各部分占总量的比例。它通过一个圆形图形,将整体数据分成若干扇形区域,每个区域的角度代表该部分占总体的比例。饼图通常用于展示各个部分对总量的贡献,特别适用于数据分布较为离散或比例关系显著的场景。饼图具有直观、简洁的特点,非常适合用来展示市场份额、销售比例、人口分布等场景。

饼图的适用场景

  1. 市场份额分析:展示各个品牌或公司在市场中的份额。
  2. 财务数据展示:比如收入、支出的分布情况。
  3. 人口或地区分布:例如某个地区不同年龄段的比例。
  4. 产品分类统计:展示不同产品销售比例。

代码示例

from pyecharts.charts import Pie
from pyecharts import options as opts

# 创建饼图对象
pie = Pie()

# 链式调用进行配置
pie.add(
    "销售额",  # 数据系列名称
    [("苹果", 30), ("香蕉", 20), ("橙子", 50)],  # 数据内容:水果及其对应的销售额
    radius=["30%", "75%"],  # 饼图的半径范围
)

# 设置全局配置
pie.set_global_opts(
    title_opts=opts.TitleOpts(title="2023年水果销售占比"),
    legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),  # 设置图例位置
)

# 渲染生成图表
pie.render()

代码解析

  • Pie():创建一个饼图对象。
  • add():用于添加数据。第一个参数是系列名称,这里是“销售额”。第二个参数是数据,包含了水果名称和对应的销售额。radius 用于设置饼图的半径,["30%", "75%"] 表示饼图的内半径和外半径,控制图形的大小和内外环之间的空隙。
  • set_global_opts():设置全局配置项,包括图表的标题、图例的位置等。
    • title_opts=opts.TitleOpts(title="2023年水果销售占比"):设置饼图的标题。
    • legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"):设置图例的位置,图例采用垂直排列,位置靠左并放置在图表的顶部。
  • render():生成 render.html 文件,使用浏览器打开即可查看图表效果。

Pyecharts 还支持更多的自定义选项,比如突出显示某个扇区、设置标签显示、调整动画效果等。以下是一个进阶的示例,展示了如何突出显示某个数据点,并显示详细标签。

代码示例

from pyecharts.charts import Pie
from pyecharts import options as opts

# 创建饼图对象
pie = Pie()

# 链式调用进行配置
pie.add(
    "销售额",  # 数据系列名称
    [("苹果", 30), ("香蕉", 20), ("橙子", 50)],
    radius=["30%", "75%"],  # 饼图的半径范围
    label_opts=opts.LabelOpts(
        is_show=True,  # 显示标签
        position="outside",  # 标签位置在扇形外部
        formatter="{b}: {c} ({d}%)",  # 标签内容,显示类别、数值和百分比
    ),
)

# 设置全局配置
pie.set_global_opts(
    title_opts=opts.TitleOpts(title="2023年水果销售占比"),
    legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
)

# 渲染生成图表
pie.render("render_advanced.html")

代码解析

  • label_opts=opts.LabelOpts(is_show=True, position="outside", formatter="{b}: {c} ({d}%)"):控制标签的显示和格式,position="outside" 将标签放置在扇形的外侧,formatter="{b}: {c} ({d}%)" 设置标签内容显示为“类别: 数值(百分比)”。

饼图的每个扇区都标有相应的标签,显示该类别的数值和占总量的百分比,同时标签线也经过了样式调整。生成的图表将更加清晰,用户能够轻松识别每个部分的具体信息。

散点图(Scatter Plot)使用介绍

散点图(Scatter Plot)通常用于展示两个变量之间的关系,比如在医学研究中,身高和体重之间的关系就是一个经典的分析场景。我们将用一个简单的例子来展示如何使用 Pyecharts 绘制散点图,并分析数据点之间的趋势。

在这个示例中,我们将生成一组虚拟的身高和体重数据,并通过散点图展示身高与体重之间的关系。假设身高和体重之间有某种程度的线性相关性,散点图将帮助我们直观地观察这一点。

数据示例

假设我们有以下数据:

  • 身高(cm):一个人的身高一般在 150cm 到 200cm 之间。
  • 体重(kg):根据身高,体重会有所不同,一般来说,身高越高,体重大致也会越大。

我们将生成一些模拟数据,展示身高与体重之间的关系。

代码示例

from pyecharts.charts import Scatter
from pyecharts import options as opts
import random

# 创建散点图对象
scatter = Scatter()

# 生成身高(cm)和体重(kg)数据
height = [random.randint(150, 200) for _ in range(50)]  # 随机生成50个身高数据
weight = [round(h * 0.5 + random.randint(10, 20), 1) for h in height]  # 假设体重与身高成正比,并添加随机偏差

# 将身高和体重数据配对
data = list(zip(height, weight))

# 添加身高和体重数据
scatter.add_xaxis([d[0] for d in data])  # 将身高数据作为 X 轴
scatter.add_yaxis("体重", [d[1] for d in data], symbol_size=8, color="#ff7f50")  # 将体重数据作为 Y 轴,并设置颜色

# 设置全局配置
scatter.set_global_opts(
    title_opts=opts.TitleOpts(title="身高与体重的关系", subtitle="散点图展示身高与体重之间的相关性"),
    xaxis_opts=opts.AxisOpts(
        name="身高 (cm)", type_="value", name_location="middle", name_gap=30
    ),
    yaxis_opts=opts.AxisOpts(
        name="体重 (kg)", type_="value", name_location="middle", name_gap=30
    ),
    tooltip_opts=opts.TooltipOpts(
        trigger="item",  # 触发方式为“item”
        formatter="身高: {b} cm<br/>体重: {c} kg",  # 格式化提示框内容,显示身高和体重
    ),
    visualmap_opts=opts.VisualMapOpts(
        min_=50,
        max_=150,
        dimension=1,  # 按体重的值进行颜色映射
        range_color=["#d94e5d", "#eac736", "#50a3ba"],  # 配置颜色范围
    ),
)

# 渲染生成图表
scatter.render()

代码解析

  • 使用 Scatter() 创建一个散点图对象,后续的配置和数据添加都将在此对象上进行。
  • height:我们用 random.randint(150, 200) 随机生成 50 个介于 150cm 到 200cm 之间的身高数据。
  • weight:体重是根据身高生成的。假设体重大致与身高成正比,h * 0.5 是体重与身高的比例,随机加上一个范围在 10 到 20 之间的偏差,使得数据看起来更自然。
  • add_xaxis():将 height 数据作为 X 轴的值传入。
  • add_yaxis():将 weight 数据作为 Y 轴的值传入,并设置点的大小为 8,颜色为 #ff7f50(一种橙色)。
  • title_opts:设置图表的标题为“身高与体重的关系”。
  • xaxis_optsyaxis_opts:分别设置 X 轴和 Y 轴的名称,并调整名称的位置。
  • tooltip_opts:配置鼠标悬浮时的提示框,显示身高和体重的具体数值。
  • visualmap_opts:根据体重值设置颜色映射,从红色到蓝色,体重越大,颜色越接近蓝色。
  • 使用 render() 方法将图表渲染到一个 HTML 文件中,这样我们可以在浏览器中查看该图表。

展示效果

生成的散点图会展示 50 个身高与体重数据点,其中:

  • X 轴表示身高(单位:cm)。
  • Y 轴表示体重(单位:kg)。
  • 数据点的颜色从红色到蓝色,代表不同的体重值,颜色越蓝表示体重大,颜色越红表示体重较小。
  • 鼠标悬停在某个数据点时,提示框会显示该点的身高和体重。

通过 Pyecharts,我们可以快速绘制出身高与体重之间的关系散点图。该图表不仅直观地展示了数据点之间的相关性,还通过颜色映射、交互提示等增强了可读性和易用性。使用 Pyecharts 的散点图,不仅可以用于类似的线性数据分析,还可以扩展到多维度数据的可视化分析中。

图表排版

多个图表竖排

当我们掌握了各种图表的基本使用方法后,接下来一个非常重要的任务就是将这些图表有效地集成到网页中,展示数据的可视化效果。Pyecharts 提供了非常方便的功能,让我们能够将图表生成 HTML 文件,并嵌入到网页中进行展示。通过将图表集成到网页,用户不仅能够与数据进行互动,还能够获得更加直观、动态的展示效果。

在接下来的内容中,我们将详细介绍如何将多个图表(如柱状图、折线图、散点图等)融合到一个网页中,并通过 HTML 和 JavaScript 来增强页面的交互性和用户体验。通过这种方式,你可以将不同类型的图表展示在同一页面上,利用 Pyecharts 提供的丰富配置选项,轻松实现数据可视化的多样性和灵活性。

from pyecharts.charts import Bar, Line, Pie, Scatter, Page
from pyecharts import options as opts
import random

# 创建柱状图
bar = Bar()
bar.add_xaxis(["A", "B", "C", "D", "E"])
bar.add_yaxis("类别1", [random.randint(10, 100) for _ in range(5)], color="#d94e5d")
bar.add_yaxis("类别2", [random.randint(10, 100) for _ in range(5)], color="#50a3ba")
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="柱状图示例"),
    xaxis_opts=opts.AxisOpts(name="类别"),
    yaxis_opts=opts.AxisOpts(name="值"),
)

# 创建折线图
line = Line()
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May"])
line.add_yaxis("销售额", [random.randint(100, 500) for _ in range(5)], color="#ff7f50")
line.set_global_opts(
    title_opts=opts.TitleOpts(title="折线图示例"),
    xaxis_opts=opts.AxisOpts(name="月份"),
    yaxis_opts=opts.AxisOpts(name="销售额"),
)

# 创建饼图
pie = Pie()
pie.add("产品占比", [("产品A", 40), ("产品B", 30), ("产品C", 20), ("产品D", 10)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="饼图示例"))

# 创建散点图
scatter = Scatter()
x_data = [random.randint(1, 100) for _ in range(30)]
y_data = [random.randint(1, 100) for _ in range(30)]
scatter.add_xaxis(x_data)
scatter.add_yaxis("散点数据", y_data, symbol_size=8, color="#ff7f50")
scatter.set_global_opts(
    title_opts=opts.TitleOpts(title="散点图示例"),
    xaxis_opts=opts.AxisOpts(name="X轴"),
    yaxis_opts=opts.AxisOpts(name="Y轴"),
)

# 使用 Page 将多个图表放在一个页面中
page = Page()
page.add(bar, line, pie, scatter)

# 渲染页面到 HTML 文件
page.render("combined_chart.html")

print("所有图表已合并到 combined_chart.html 文件中。")

通过执行这段代码,最终会生成一个名为 combined_chart.html 的文件。打开该文件后,你将看到一个网页,包含四个图表(柱状图、折线图、饼图、散点图),它们将呈现在同一个页面中,用户可以浏览并查看不同图表的数据。通过 Pyecharts 提供的 Page 类,我们可以方便地将多个图表集成到一个 HTML 页面中进行展示,提升数据展示的效果和用户体验。

拖拽图表

在很多场景下,我们需要根据各个图表的具体情况来进行拖拽式的展示,在这里,pyecharts 同样提供了一个拖拽式的功能。Save Config 按钮就是用来保存拖拽后的样式的。

from pyecharts.charts import Bar, Line, Pie, Scatter, Page
from pyecharts import options as opts
import random

# 创建柱状图
bar = Bar(init_opts=opts.InitOpts(width="50%", height="400px"))
bar.add_xaxis(["A", "B", "C", "D", "E"])
bar.add_yaxis("类别1", [random.randint(10, 100) for _ in range(5)], color="#d94e5d")
bar.add_yaxis("类别2", [random.randint(10, 100) for _ in range(5)], color="#50a3ba")
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="柱状图示例"),
    xaxis_opts=opts.AxisOpts(name="类别"),
    yaxis_opts=opts.AxisOpts(name="值"),
)

# 创建折线图
line = Line(init_opts=opts.InitOpts(width="50%", height="400px"))
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May"])
line.add_yaxis("销售额", [random.randint(100, 500) for _ in range(5)], color="#ff7f50")
line.set_global_opts(
    title_opts=opts.TitleOpts(title="折线图示例"),
    xaxis_opts=opts.AxisOpts(name="月份"),
    yaxis_opts=opts.AxisOpts(name="销售额"),
)

# 创建饼图
pie = Pie(init_opts=opts.InitOpts(width="50%", height="400px"))
pie.add("产品占比", [("产品A", 40), ("产品B", 30), ("产品C", 20), ("产品D", 10)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="饼图示例"))

# 创建散点图
scatter = Scatter(init_opts=opts.InitOpts(width="50%", height="400px"))
x_data = [random.randint(1, 100) for _ in range(30)]
y_data = [random.randint(1, 100) for _ in range(30)]
scatter.add_xaxis(x_data)
scatter.add_yaxis("散点数据", y_data, symbol_size=8, color="#ff7f50")
scatter.set_global_opts(
    title_opts=opts.TitleOpts(title="散点图示例"),
    xaxis_opts=opts.AxisOpts(name="X轴"),
    yaxis_opts=opts.AxisOpts(name="Y轴"),
)

# 使用 Page 将多个图表放在一个页面中,调整为左右布局
page = Page(layout=Page.DraggablePageLayout, page_title="综合数据展示")
page.add(bar, line, pie, scatter)

# 渲染页面到 HTML 文件
page.render("combined_chart.html")

print("所有图表已合并到 combined_chart.html 文件中。")

这样会形成一个可以拖拽式的网页,拖拽完成之后点击左上角的 Save Config 按钮,可以得到一个 chart_config.json 文件。然后写一个新的脚本,运行下面的代码,即可将原有的 html 文件(’combined_chart.html’)和 chart_config.json 文件一起生成新的 html 文件(’combined_chart_resize.html’)并且符合拖拽后的样式。

from pyecharts.charts import Page
# 在生成的config上,重新生成chart
page = Page()
page.save_resize_html('combined_chart.html', cfg_file='chart_config.json', dest='combined_chart_resize.html')

通过 PageDraggablePageLayout 布局,图表会以拖拽的方式自动排列。你可以通过手动调整页面上的每个图表位置。width="50%" 表示每个图表将占据页面宽度的一半,因此两个图表将并排显示。height="400px" 设置每个图表的高度为 400px,可以根据需要调整这个值。

增加标题

在数据可视化的场景中,需要给这个页面增加一个标题,在这里,可以使用一个空的饼图来实现,也就是只需要展示标题而不需要展示饼图的数据。

from pyecharts.charts import Bar, Line, Pie, Scatter, Page
from pyecharts import options as opts
import random

# 创建饼图,只显示标题
big_title = (
    Pie(init_opts=opts.InitOpts(width="50%", height="50px"))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="数据可视化大屏",
            title_textstyle_opts=opts.TextStyleOpts(
                font_size=40,  # 调整字体大小
                font_weight="bold",  # 可选:字体加粗
                color="#000000"  # 可选:字体颜色
            ),
        )
    )
)

# 创建柱状图
bar = Bar(init_opts=opts.InitOpts(width="50%", height="300px"))
bar.add_xaxis(["A", "B", "C", "D", "E"])
bar.add_yaxis("类别1", [random.randint(10, 100) for _ in range(5)], color="#d94e5d")
bar.add_yaxis("类别2", [random.randint(10, 100) for _ in range(5)], color="#50a3ba")
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="柱状图示例"),
    xaxis_opts=opts.AxisOpts(name="类别"),
    yaxis_opts=opts.AxisOpts(name="值"),
)

# 创建折线图
line = Line(init_opts=opts.InitOpts(width="50%", height="300px"))
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May"])
line.add_yaxis("销售额", [random.randint(100, 500) for _ in range(5)], color="#ff7f50")
line.set_global_opts(
    title_opts=opts.TitleOpts(title="折线图示例"),
    xaxis_opts=opts.AxisOpts(name="月份"),
    yaxis_opts=opts.AxisOpts(name="销售额"),
)

# 创建饼图
pie = Pie(init_opts=opts.InitOpts(width="50%", height="300px"))
pie.add("产品占比", [("产品A", 40), ("产品B", 30), ("产品C", 20), ("产品D", 10)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="饼图示例"))

# 创建散点图
scatter = Scatter(init_opts=opts.InitOpts(width="50%", height="300px"))
x_data = [random.randint(1, 100) for _ in range(30)]
y_data = [random.randint(1, 100) for _ in range(30)]
scatter.add_xaxis(x_data)
scatter.add_yaxis("散点数据", y_data, symbol_size=8, color="#ff7f50")
scatter.set_global_opts(
    title_opts=opts.TitleOpts(title="散点图示例"),
    xaxis_opts=opts.AxisOpts(name="X轴"),
    yaxis_opts=opts.AxisOpts(name="Y轴"),
)

# 使用 Page 将多个图表放在一个页面中,调整为左右布局
page = Page(layout=Page.DraggablePageLayout, page_title="综合数据展示")
page.add(big_title, bar, line, pie, scatter)

# 渲染页面到 HTML 文件
page.render("combined_chart.html")

print("所有图表已合并到 combined_chart.html 文件中。")

通过这样的方式,可以呈现出标题的样式,然后再使用拖拽式的方法,来实现最终的数据可视化看板呈现。下图就是一个完成的数据可视化看板样式。

结束语

在这篇文章中,我们深入探讨了 Pyecharts —— 一款简单易用、功能强大的 Python 数据可视化库。通过直观的图表和丰富的自定义选项,Pyecharts 不仅能够帮助我们快速生成各类图表,还能够通过精细的配置满足不同场景的需求。从基础的柱状图、折线图到复杂的地理坐标系图、3D 曲面图,Pyecharts 都能轻松驾驭,展示数据的独特魅力。作为 Python 生态中的重要可视化工具,Pyecharts 的灵活性与易用性使得它在数据分析、报表生成、科研展示等领域得到了广泛的应用。而通过与前端技术结合,它还可以将图表嵌入到网页中,让数据的可视化更具交互性和视觉冲击力。

无论是数据分析师、科学家,还是开发者、产品经理,掌握 Pyecharts 都能让你在数据可视化的道路上走得更远。随着数据量的不断增长,如何用图表讲述一个清晰、有说服力的故事已经成为我们不断追求的目标。而 Pyecharts,正是一个帮助我们实现这一目标的得力助手。希望望这篇文章能够为你打开数据可视化的新世界。如果你还没有开始使用 Pyecharts,今天就可以动手试试。通过不断尝试和探索,你会发现更多有趣的图表效果,进而提升你对数据的理解和呈现能力。

数据可视化不仅仅是让数字“好看”,更是让数据“讲故事”。在这个信息爆炸的时代,掌握数据的可视化语言,正是与世界对话的钥匙。感谢阅读,也希望你在 Pyecharts 的世界里,能够享受创作的乐趣,发现更多无限的可能性。