2016-11-16 82 views
1

imshow子圖上的Y限制被卡在看似任意的範圍內。使用帶有matplotlib的共享x軸的imshow

在這個例子中,我試圖展示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限制?

+0

你可以指定你正在努力實現與第二個圖(如詳細的使用程度,爲什麼你繪製的數據,而不是數據什麼.T等)? –

+0

@ P.Camilleri增加了一些激發人心的問題。 –

+0

@ P.Camilleri也爲情節添加了標籤。 –

回答

2

默認情況下,imshow使用等寬高比。 由於您的x軸固定在上圖(ax1)的範圍內,即1,因此y軸只能延伸至1的一小部分。

解決辦法其實很簡單:你只需要添加

ax2.set_aspect('auto') 
+0

美麗。謝謝! –