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

Matplotlib设置sharex=True时绘图时间轴异常的原因咨询

为什么sharex=True导致时间轴显示错误?

咱们直接说问题的核心:你代码里的两个子图,x轴的数据源根本不一样!

你在绘制第一个子图ax0.plot(signal[0])时,没有传入时间轴t,matplotlib会自动用数据的索引(也就是0、1、2……这样的整数)作为x轴数值;但第二个子图ax1.plot(t,signal[1])用的是datetime类型的时间轴t。

当你设置sharex=True时,matplotlib会强制让两个子图共享同一个x轴的刻度规则和数据类型。但整数索引和datetime对象完全是两种不同类型的x轴数据,matplotlib没办法把它们正确对齐,自然就会出现时间轴显示错乱的问题。

而单独绘图时,每个子图都用自己适配的x轴类型:画signal_1用索引轴,画signal_2用datetime轴,各自独立没有冲突,所以显示正常。

修正方案

只需要让两个子图的x轴都使用同一个时间轴t就行,修改第一个子图的绘图代码:

fig, (ax0,ax1) = plt.subplots(nrows=2,ncols=1,sharex=True)
ax0.plot(t, signal[0])  # 补上时间轴t,和第二个子图保持一致
ax1.plot(t, signal[1])
plt.show()

这样两个子图的x轴都是datetime类型,sharex=True就能正常工作,时间轴显示也会完全正确。

另外给你提个小优化:生成信号的嵌套循环可以用numpy向量化运算简化,效率更高也更简洁:

signal = []
for i in range(2):
    j = np.arange(len(t))
    e = amp[i] * np.sin((2*np.pi/period[i])*j + (np.pi/180)*(phase[i]))
    signal.append(e)

内容的提问来源于stack exchange,提问作者Ranjan Kumar Sahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:17:42