使用带有matplotlib的共享x轴的imshow

时间:2016-11-16 19:08:40

标签: python matplotlib

imshow子图上的Y限制卡在看似任意的范围内。

在这个例子中,我试图显示N次试验的平均值,然后将所有N次试验随时间绘制为2d图。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
N = 20   # number of trials
M = 3000  # number of samples in each trial
data = np.random.randn(N, M)
x = np.linspace(0,1,M)  # the M samples occur in the range 0-1 
                    # ie the sampling rate is 3000 samples per second
f, (ax1, ax2) = plt.subplots(2,1, sharex=True)
ax1.plot(x, np.mean(data, 0))
ax2.imshow(data, cmap="inferno", interpolation="nearest", extent=[0, 1, 0, N])
ax2.set_ylim(0, N)
ax1.set_ylabel("mean over trials")
ax2.set_ylabel("trial")
ax2.set_xlabel("time")

rogue plot

是否有正确设置Y限制的技巧?

1 个答案:

答案 0 :(得分:3)

默认情况下,imshow使用相同的宽高比。 由于x轴固定在上图(ax1)的范围内,即1,因此y轴只能扩展到1的一小部分。

解决方案实际上非常简单:您只需要添加

ax2.set_aspect('auto')