You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matplotlib或Seaborn实现带分层的断裂折线图?

实现垂直分层断裂轴图表的方法及名称说明

图表名称

这类图表被称为垂直分层断裂轴图(Vertically Stacked Broken Axis Chart),核心是将跨度极大的不连续数据区间拆分为上下分层的子图展示,既保留断裂轴的信息,又通过分层让不同区间的趋势更清晰。

实现方法

brokenaxes默认是在同一平面实现轴断裂,要达到分层效果,可通过Matplotlib的子图(subplots)手动构建上下分层结构,配合轴样式调整和断裂标记来实现,代码示例如下:

import matplotlib.pyplot as plt
import numpy as np

# 创建上下两个子图,共享Y轴,自定义高度比例
fig, (ax_upper, ax_lower) = plt.subplots(2, 1, figsize=(8, 5), sharey=True, 
                                         gridspec_kw={'height_ratios': [1, 3]})

# ---------------------- 下层子图:展示左侧数据区间 ----------------------
x_left = np.linspace(0, 10, 100)
ax_lower.plot(x_left, np.sin(x_left), label='Part 1')
ax_lower.set_xlim(0, 10)
# 隐藏子图顶部边框
ax_lower.spines['top'].set_visible(False)
# 添加顶部的断裂斜线标记
d = 0.015  # 控制断裂标记的大小
kwargs = dict(transform=ax_lower.transAxes, color='black', clip_on=False)
ax_lower.plot((-d, +d), (-d, +d), **kwargs)       # 左下断裂标记
ax_lower.plot((1 - d, 1 + d), (-d, +d), **kwargs) # 右下断裂标记

# ---------------------- 上层子图:展示右侧数据区间 ----------------------
x_right = np.linspace(195, 200, 100)
ax_upper.plot(x_right, np.cos(x_right), label='Part 2')
ax_upper.set_xlim(195, 200)
# 隐藏子图底部边框,取消底部刻度
ax_upper.spines['bottom'].set_visible(False)
ax_upper.tick_params(axis='x', bottom=False)
# 添加底部的断裂斜线标记
kwargs.update(transform=ax_upper.transAxes)
ax_upper.plot((-d, +d), (1 - d, 1 + d), **kwargs)       # 左上断裂标记
ax_upper.plot((1 - d, 1 + d), (1 - d, 1 + d), **kwargs) # 右上断裂标记

# 调整子图间距,让分层更紧凑
plt.subplots_adjust(hspace=0.05)

# 添加统一图例
fig.legend(loc='upper right')

plt.show()

代码说明

  • 通过gridspec_kw可以自定义上下子图的高度比例,适配不同数据的展示需求;
  • 共享Y轴(sharey=True)保证上下层数据的Y轴刻度一致,避免视觉混淆;
  • 手动添加的斜线标记模拟轴断裂的视觉效果,隐藏相邻边框让分层更自然;
  • 相比brokenaxes,这种方式更灵活控制分层布局和样式细节。

内容的提问来源于stack exchange,提问作者Explorer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 17:42:34