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

Matplotlib实现X轴双断口及轴长按区间比例缩放问题求助

解决方案

1 brokenaxes报错处理

该报错是brokenaxes库与3.7及以上版本Matplotlib不兼容导致,两种解决方式:

  • 降级Matplotlib到3.6.x版本,执行命令:pip install matplotlib==3.6.3,即可正常运行官方示例
  • 直接使用原生Matplotlib实现需求,无需依赖第三方库,可控性更高

2 原生Matplotlib实现双断口X轴图表

以下完整代码可同时满足双断口、子图宽度与X轴区间长度成正比的要求:

import numpy as np
import matplotlib.pyplot as plt

# 生成测试数据
days = list(range(0,500))
values = list(np.random.randint(low = 10,high=100,size=len(days)))

# 定义三个X轴区间的长度,用于设置子图宽度比例
x_range_len = [100, 50, 100] # 对应0-100、250-300、400-500的区间长度
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, sharey=True, facecolor='w', 
                                    gridspec_kw={'width_ratios': x_range_len},
                                    figsize=(7,5))

# 三个子图都绘制相同数据
ax1.plot(days, values)
ax2.plot(days, values)
ax3.plot(days, values)

# 分别设置三个子图的X轴显示范围
ax1.set_xlim(0, 100)
ax2.set_xlim(250, 300)
ax3.set_xlim(400, 500)

# 隐藏相邻子图的重叠脊线
ax1.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax2.spines['right'].set_visible(False)
ax3.spines['left'].set_visible(False)

# 调整刻度显示,仅最左侧子图显示Y轴刻度
ax1.yaxis.tick_left()
ax2.tick_params(axis='y', left=False, labelleft=False)
ax3.tick_params(axis='y', left=False, labelleft=False)

# 绘制断口处的斜线标记
d = .015 # 斜线大小
kwargs = dict(transform=ax1.transAxes, color='k', clip_on=False)
# 第一个子图右侧断口斜线
ax1.plot((1-d,1+d), (-d,+d), **kwargs)
ax1.plot((1-d,1+d),(1-d,1+d), **kwargs)

# 第二个子图左右两侧断口斜线
kwargs.update(transform=ax2.transAxes)
ax2.plot((-d,+d), (1-d,1+d), **kwargs)
ax2.plot((-d,+d), (-d,+d), **kwargs)
ax2.plot((1-d,1+d), (1-d,1+d), **kwargs)
ax2.plot((1-d,1+d), (-d,+d), **kwargs)

# 第三个子图左侧断口斜线
kwargs.update(transform=ax3.transAxes)
ax3.plot((-d,+d), (1-d,1+d), **kwargs)
ax3.plot((-d,+d), (-d,+d), **kwargs)

# 调整子图间距
plt.subplots_adjust(wspace=0.05)
plt.show()

如果需要调整X轴区间,只需修改对应set_xlim的参数,同步更新x_range_len列表里的区间长度即可自动适配子图宽度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:36:00