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

如何将ruptures.display返回的图整合到plt.subplot子图布局中?

解决方案

核心思路是利用ruptures.display的ax参数,指定要绘制的目标子图Axes,避免每次调用都生成独立的Figure。

方法一:提前创建所有子图Axes(推荐)

这种方式更清晰,能直接管理所有子图:

import matplotlib.pyplot as plt
import ruptures as rpt
import numpy as np

# 模拟4组数据和对应的分割点(替换成你的实际数据)
n_samples = 1000
data_list = [np.random.randn(n_samples) for _ in range(4)]
bkps_list = [rpt.Pelt(model="l2").fit_predict(data, pen=10) for data in data_list]

# 创建4行1列的全局画布和子图Axes列表
fig, axes = plt.subplots(4, 1, figsize=(10, 12))

for idx in range(4):
    current_ax = axes[idx]
    # 调用display时指定ax参数,将图绘制到当前子图
    rpt.display(data_list[idx], bkps_list[idx], ax=current_ax)
    current_ax.set_title(f"第{idx+1}组数据分割结果")

# 自动调整子图间距,避免标题/标签重叠
plt.tight_layout()
plt.show()

方法二:循环中逐个创建子图

如果你习惯用plt.subplot(4,1,j)的方式,也可以这样写:

import matplotlib.pyplot as plt
import ruptures as rpt
import numpy as np

# 同样替换成你的实际数据
n_samples = 1000
data_list = [np.random.randn(n_samples) for _ in range(4)]
bkps_list = [rpt.Pelt(model="l2").fit_predict(data, pen=10) for data in data_list]

# 创建全局画布
plt.figure(figsize=(10, 12))

# 子图索引从1开始
for j in range(1, 5):
    current_ax = plt.subplot(4, 1, j)
    rpt.display(data_list[j-1], bkps_list[j-1], ax=current_ax)
    current_ax.set_title(f"第{j}组数据分割结果")

plt.tight_layout()
plt.show()

关键说明

默认情况下ruptures.display会自动创建新的Figure,导致每次循环生成独立窗口。通过传入ax参数,强制将绘图内容渲染到你指定的子图Axes上,就能实现4幅图垂直排列在同一个画布中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:57:45