Pyecharts之双轴图表的魅力

在数据可视化的实践中,我们经常会遇到这样的情景:希望在一张图中展示不同量纲的数据,以便进行对比与关联分析。这时,双轴图表(双 Y 轴或双 X 轴)便可派上用场。通过 Pyecharts,我们可以轻松创建多轴图表,从而在同一个可视化中同时展示多种维度的信息。

本篇文章将以三个典型的双轴图表示例为基础,为您展示从代码到效果的实现思路:

  1. 双 Y 轴直方图与折线图组合
  2. 双 Y 轴直方图单独应用
  3. 双 X 轴折线图实现

一、双 Y 轴直方图与折线图组合

在同一张图中同时展示柱状图和折线图并为它们配备两个 Y 轴,可以清晰地对比两组不同量纲的数据。例如,我们希望在同一图上展示"销售量"(柱状图,左侧 Y 轴)与"销售增长率"(折线图,右侧 Y 轴)的关系。

代码示例:

python 复制代码
# 导入所需的库
from pyecharts.charts import Bar, Line, Grid
from pyecharts import options as opts

# 创建一个 Bar 实例 (销售量)
bar = Bar()
bar.add_xaxis(['产品 A', '产品 B', '产品 C', '产品 D'])
bar.add_yaxis(
    '销售量', 
    [120, 200, 150, 80], 
    yaxis_index=0, 
    itemstyle_opts=opts.ItemStyleOpts(color="#1f77b4")  # 蓝色
)
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="双 Y 轴直方图与折线图组合"),
    tooltip_opts=opts.TooltipOpts(trigger="axis"),
    yaxis_opts=opts.AxisOpts(
        name="销售量",
        type_="value",
        position="left",
        axisline_opts=opts.AxisLineOpts(
            linestyle_opts=opts.LineStyleOpts(color="#1f77b4")
        )
    )
)

# 创建一个 Line 实例 (销售增长率)
line = Line()
line.add_xaxis(['产品 A', '产品 B', '产品 C', '产品 D'])
line.add_yaxis(
    '销售增长率', 
    [30, 40, 35, 20], 
    yaxis_index=1, 
    linestyle_opts=opts.LineStyleOpts(width=4, color="#ff7f0e")  # 橙色
)
line.set_global_opts(
    yaxis_opts=opts.AxisOpts(
        name="销售增长率",
        type_="value",
        position="right",
        axisline_opts=opts.AxisLineOpts(
            linestyle_opts=opts.LineStyleOpts(color="#ff7f0e")
        )
    )
)

# 使用 Grid 将 Bar 与 Line 叠加
grid = Grid()
grid.add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))  # 柱状图下半部分
grid.add(line, grid_opts=opts.GridOpts(pos_top="60%"))    # 折线图上半部分

grid.render_notebook()

实现思路

  • 使用 Bar 展示销售量数据,并将其 Y 轴放在左侧。
  • 使用 Line 展示销售增长率数据,并将其 Y 轴放在右侧(yaxis_index=1)。
  • 通过 Grid 对象将两张图进行上下叠加,从而在同一画布中同时展现。

通过这种方式,我们可以在一张图上直接看到销售量与增长率的对比,更有利于分析数据间的关系。

二、双 Y 轴直方图单独应用

当我们仅需要展示两组不同量纲的柱状数据(例如销售量与库存量),也可以使用双 Y 轴的方式将它们放在同一图表中。这样,我们可以在一个图表中直观地比较两种数据间的关系和趋势。

代码示例:

python 复制代码
from pyecharts.charts import *
from pyecharts import options as opts
import random

x_data = ['香蕉', '梨子', '水蜜桃', '核桃', '西瓜', '苹果']
y_data_1 = [random.randint(10, 50) for _ in range(len(x_data))]
y_data_2 = [random.randint(100, 500) for _ in range(len(x_data))]

def bar_with_multiple_axis():
    bar = Bar(init_opts=opts.InitOpts(theme='light', width='1000px', height='600px'))
    bar.add_xaxis(x_data)
    # 使用 extend_axis 为图表添加第二个 Y 轴
    bar.extend_axis(yaxis=opts.AxisOpts())

    # 添加两组数据,分别关联到不同的 Y 轴上
    bar.add_yaxis('左边Y轴', y_data_1, yaxis_index=0)
    bar.add_yaxis('右边Y轴', y_data_2, yaxis_index=1)
    return bar

chart = bar_with_multiple_axis()
chart.render_notebook()

实现思路

  • 使用 Bar 创建柱状图并加载主数据系列(与左侧 Y 轴关联)。
  • 通过 extend_axis() 增加第二个 Y 轴,然后将第二组数据与 yaxis_index=1 关联。
  • 两组数据的量纲不同,却能在一张图上清晰地展示,为比较它们间的关系提供了直观的手段。

三、双 X 轴折线图实现

有时,我们需要在同一图表中对比不同类别或时间点的数据,可能需要在上下两个 X 轴上分别展示不同数据维度。双 X 轴折线图即为此而生。

代码示例:

python 复制代码
from pyecharts.charts import *
from pyecharts import options as opts
import random

x_data_1 = ["2020/10/{}".format(i + 1) for i in range(30)]
x_data_2 = ["2019/10/{}".format(i + 1) for i in range(30)]
y_data_1 = [random.randint(10, 50) for _ in range(30)]
y_data_2 = [random.randint(20, 60) for _ in range(30)]

def line_with_two_xaxis():
    line = Line(init_opts=opts.InitOpts(theme='light', width='1000px', height='600px'))
    line.add_xaxis(x_data_1)
    # 使用 extend_axis 添加另一个 X 轴
    # 注意:这里使用 xaxis_data 和 xaxis=opts.AxisOpts() 为图表扩展第二 X 轴
    line.extend_axis(xaxis_data=x_data_2, xaxis=opts.AxisOpts())
    line.add_yaxis('下面X轴', y_data_1)     # 使用原 X 轴数据(x_data_1)
    line.add_yaxis('上面X轴', y_data_2)     # 使用扩展的 X 轴数据(x_data_2)
    return line

chart = line_with_two_xaxis()
chart.render_notebook()

实现思路

  • 使用 Line 创建基本折线图并添加第一组横坐标数据 x_data_1
  • 使用 extend_axis(xaxis_data=x_data_2, xaxis=...) 来添加第二个 X 轴及其数据。
  • 分别为两条折线指定数据列,第一条折线沿用主 X 轴数据,第二条折线使用扩展的 X 轴数据,从而形成上下两个 X 轴分别展示不同数据的效果。

四、总结

本篇文章展示了双轴图表在数据可视化中的独特优势与实用性。在实际的数据可视化工作中,双轴图表能让您在一张图上表达更为复杂和丰富的信息,有效提升数据洞察的深度和广度。在后续的文章中,我们还将继续探讨更多类型和技巧的图表可视化方法,敬请期待!

相关推荐
张高兴39 分钟前
张高兴的 Hailo-10 开发指南:(二)使用 LangChain 搭建本地大模型 RAG 问答应用
python·边缘计算·hailo
财经资讯数据_灵砚智能1 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月6日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
Land03291 小时前
Python + RPA 双引擎实战:从手写脚本到可交付自动化应用的完整链路
python·自动化·rpa
菜到离谱但坚持1 小时前
【小白零基础】RAG+LangChain 搭建私有知识库问答系统(完整可运行代码+超详细教程+避坑指南)
python·langchain·rag
纪伊路上盛名在1 小时前
意大利米兰大学结构生物信息学教程-02 生物分子动力学的统计力学视角
数据分析·分子动力学·结构·蛋白质·统计力学·统计物理·能量
ss2732 小时前
【入门OJ题解】分苹果问题(Python/Java/C 实现)
java·c语言·python
IsJunJianXin2 小时前
谷歌搜索cookie NID逆向生成
开发语言·python·google搜索·sgss·nid-cookie·算法生成nid·google-cookie
暗夜猎手-大魔王2 小时前
转载--Hermes Agent 11 | 智能审批与平台化安全:当 AI 来守护 AI
人工智能·python·安全
AIFQuant2 小时前
量化私募回测系统:高质量股票/外汇历史数据 API 选型与接入
python·websocket·金融·ai量化
Mr.Daozhi2 小时前
Playwright实战:抓取Meta Ad Library动态页面的三级降级策略
爬虫·python·自动化·playwright·meta广告