2013-01-14 90 views
17

我試圖用散點圖繪製一些數據。我的代碼是Matplotlib imshow:數據已旋轉?

import matplotlib.pyplot as plt 
import matplotlib as mpl 
import numpy as np 
from scipy.interpolate import griddata 
data = np.loadtxt('file1.txt') 
x = data[:,0] 
y = data[:,1] 
z = data[:,2] 
plt.scatter(x, y, c=z, s=100, cmap=mpl.cm.spectral) 
cbar=plt.colorbar() 
s=18 
plt.ylabel(r"$a_v$", size=s) 
plt.xlabel(r"$a_{\rm min}$", size=s) 
plt.xlim([x.min(),x.max()]) 
plt.ylim([y.min(),y.max()]) 
plt.show() 

結果是 enter image description here

現在我來的主意,試圖imshow與一些數據,soince我不喜歡分散的圓圈。 所以,我想這個

from matplotlib.mlab import griddata 
import matplotlib.pyplot as plt 
data = np.loadtxt('file1.txt') 
x = data[:,0] 
y = data[:,1] 
z = data[:,2] 

N = 30j 
extent = (min(x), max(x), min(y), max(y)) 

xs,ys = np.mgrid[extent[0]:extent[1]:N, extent[2]:extent[3]:N] 

resampled = griddata(x, y, z, xs, ys) 

plt.imshow(resampled.T, extent=extent) 
s=18 
plt.ylabel(r"$a_v$", size=s) 
plt.xlabel(r"$a_{\rm min}$", size=s) 
plt.xlim([x.min(),x.max()]) 
plt.ylim([y.min(),y.max()]) 
cbar=plt.colorbar() 
plt.show() 

有了這樣的結果: enter image description here

我的問題是obviosly爲什麼imshow()沒有反轉的數據?這裏發生了什麼?

PS:這裏有data,萬一有人願意與他們

回答

31

看看關鍵字參數imshow。有origin。默認是「上」,但你想「下」。

默認情況下繪製圖像是有意義的,通常從左上角開始。對於大多數矩陣繪圖,您需要origin="lower"

+0

挽救了我的生活 並花費我幾個小時來調試我的「推測性」錯誤功能 – n3rd

4

發揮它不倒,只是翻轉。 imshow的原點默認爲左上角,而不是左下角。 imshow有一個參數來指定原點,它被命名爲原點。或者,您可以在matplotlib.conf中設置默認值。

+0

如果您想要運行其他人的代碼,則全局更改默認情況似乎是個壞主意。 – Mark

1

順便說一句,您可以使用marker ='s'在散點圖中繪製正方形而不是圓形,然後保留原始代碼。

2

考慮使用pcolormeshcontourf如果要繪製f(X, Y) = Z表格的數據。 imshow只是繪製數據Z,縮放和重新採樣已經完成手動完成。