2010-10-19 49 views
4

我是一個新的用戶python & matplotlib,這可能是一個簡單的問題,但我搜索了幾個小時的互聯網,並找不到解決方案。奇怪的色彩值範圍,matplotlib

我正在繪製NetCDF格式的降水數據。我發現奇怪的是,數據沒有任何負面的價值(我多次查過,只是爲了確定)。但是,顏色條中的值以負值開始(如-0.0000312等)。它沒有任何意義,因爲我不對數據做任何操作,其他只從大文件中選擇一部分數據並繪製它。

所以我的代碼並沒有太多。下面是代碼:

from mpl_toolkits.basemap import Basemap 
import numpy as np 
import matplotlib.pyplot as plt 
from netCDF4 import Dataset 
cd progs 
f=Dataset('V21_GPCP.1979-2009.nc') 
lats=f.variables['lat'][:] 
lons=f.variables['lon'][:] 
prec=f.variables['PREC'][:] 
la=lats[31:52] 
lo=lons[18:83] 
pre=prec[0,31:52,18:83] 
m = Basemap(width=06.e6,height=05.e6,projection='gnom',lat_0=15.,lon_0=80.) 
x, y = m(*np.meshgrid(lo,la)) 
m.drawcoastlines() 
m.drawmapboundary(fill_color='lightblue') 
m.drawparallels(np.arange(-90.,120.,5.),labels=[1,0,0,0]) 
m.drawmeridians(np.arange(0.,420.,5.),labels=[0,0,0,1]) 
cs=m.contourf(x,y,pre,50,cmap=plt.cm.jet) 
plt.colorbar() 

,我得到了這些代碼是一個美麗的情節,從價值-0.00001893啓動彩條的輸出,剩下的都是正面的價值觀,我相信是正確的。它只是最小的價值,這讓我煩惱。

我想知道:

  1. 這有什麼錯在我的代碼?因爲我知道數據是正確的。
  2. 有沒有辦法手動將值更改爲0?
  3. 顏色欄中的值每次運行代碼時都會改變,相同數據的餘弦值,下一次運行代碼時的值是否爲「-0.00001893,200000000,400000000,6.00000000等等」
  4. 我想自定義它們爲 「0.0,2.0,4.0,6.0等」

感謝, Vaishu

+0

你真的確定,那個價值是不正確的?也許印刷展示了一個圓整的價值。嘗試打印pre.min() – tillsten 2010-10-22 18:26:06

回答

2

是的,你可以手動設置格式有關的一切彩條。看到這一點:

import matplotlib.colors as mc 
import matplotlib.pyplot as plt 
plt.imshow(X, norm=mc.Normalize(vmin=0)) 
plt.colorbar(ticks=[0,2,4,6], format='%0.2f') 
  1. 許多繪圖功能,包括imshowcontourf,以及其他包括norm的論點,即需要一個Normalize對象。您可以設置該對象的vminvmax屬性來調整相應的顏色條值。

  2. colorbar需要ticksformat參數來調整要顯示的刻度以及如何顯示它們。

+0

輪廓還將所需等高線的值作爲參數,因此他還可以執行cs = m.contourf(x,y,pre,np.arange(0,pre.max())。 2),cmap = plt.cm.jet) – tillsten 2010-10-22 18:34:24

+0

好點,但我不確定它是否可以解決彩條的問題。 – 2010-10-22 20:48:39

+0

+1 for mc.Normalize - 否則子圖中的圖像*每個*縮放爲0 .. 1.(-10表示imshow文檔:「MxN浮點數組*可以被標準化」和norm =無) – denis 2010-11-03 18:43:31