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

如何在matplotlib的plt.acorr中修改x轴刻度为实际时间间隔(秒)

如何在matplotlib的plt.acorr中修改x轴刻度为实际时间间隔(秒)

嗨,这个问题很好解决!plt.acorr默认用采样点的序号作为滞后刻度,但我们可以轻松把它转换成实际的时间间隔,下面给你两种实用的方法:

方法一:捕获返回值,手动映射时间刻度

plt.acorr会返回几个关键值,其中就包含默认的滞后采样点序号数组lags。我们只需要把这些序号乘以你的采样间隔(2.16秒),就能得到真实的时间滞后,再替换x轴的刻度标签即可:

import matplotlib.pyplot as plt
import numpy as np

data = [7.27958e-01, 6.59925e-01, 2.62454e-01, -1.73168e-01, 9.55694e-01,
        2.25121e-01, 1.08360e+00, 3.71316e-01, -3.17764e+00, -1.15648e+00, -2.42453e+00]

# 定义每个采样点之间的时间间隔(秒)
sampling_interval = 2.16

# 调用plt.acorr并捕获返回的滞后序号数组lags
lags, corr, _, _ = plt.acorr(x=data, maxlags=None, normed=True, usevlines=True,
                             color="blue", lw=2)

# 将采样点滞后数转换为实际时间(秒)
time_lags = lags * sampling_interval

# 替换x轴刻度:保留原刻度位置,将标签改为实际时间(保留两位小数更整洁)
plt.xticks(lags, time_lags.round(2))

# 设置x轴范围(按需调整)
max_positive_time = np.max(time_lags[time_lags >= 0])
plt.xlim(-0.1, max_positive_time)

plt.xlabel("滞后时间(秒)")
plt.ylabel("自相关系数")
plt.show()

方法二:直接修改现有刻度标签

如果已经绘制了自相关图,也可以直接获取当前x轴的刻度,再批量转换为时间值:

# 先绘制自相关图
plt.acorr(x=data, maxlags=None, normed=True, usevlines=True,
          color="blue", lw=2)

sampling_interval = 2.16
# 获取当前x轴的刻度位置
current_tick_positions = plt.xticks()[0]
# 将每个刻度位置转换为实际时间
time_tick_labels = [round(pos * sampling_interval, 2) for pos in current_tick_positions]
# 设置新的刻度标签
plt.xticks(current_tick_positions, time_tick_labels)

plt.xlim(-0.1, 10 * sampling_interval)
plt.show()

额外说明

如果想要x轴显示均匀间隔的时间刻度(比如每2秒一个刻度),可以先计算对应需要的采样点滞后数,再手动指定刻度:

desired_time_ticks = np.arange(0, 22, 2)  # 0,2,4,...,20秒
# 计算对应的采样点滞后数
corresponding_lags = desired_time_ticks / sampling_interval
plt.xticks(corresponding_lags, desired_time_ticks)

不过要注意,这种情况下的刻度位置可能和plt.acorr绘制的竖线位置不完全对齐,因为竖线是固定在整数采样点滞后的位置上的。

备注:内容来源于stack exchange,提问作者Philipp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:42:44