如何在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
相关产品推荐
相关产品推荐

