2017-08-02 61 views
0

我有一個numpy數組precip_subset,它的形狀爲(31, 60, 48)。通過合併31個數據集創建了precip_subset;數據集中的第一個變量表示日期,第二個表示經度,第三個表示緯度。在數據集的每個位置有一個獨特的降水值;例如,print(precip_subset[1,0,32])會給我一個值1.05如何使用底圖繪製點

我會告訴我有我的代碼迄今所做的:

data_low = precip_subset[(precip_subset > 0) & (precip_subset < 3.14062)] 
anomalies = [] 
for val in data_low: 
    if val < 1: 
     anomalies.append(val) 
     print(anomalies) 

data_low_indices1 = np.where((precip_subset > 0) & (precip_subset < 1)) 
data_low_indices2 = np.array(np.where((precip_subset > 0) & (precip_subset < 1))).T 
anomalies_ind = [] 
for ind in data_low_indices2: 
    anomalies_ind.append(ind) 
    print(np.asarray(anomalies_ind)) 

基本上,這段代碼我能夠得到沉澱的價值,它們的指標的原始數據集,precip_subset。從這裏,我想用Basemap繪製這些數據 - 我想在地圖上找到一個發現異常的點。 precip_subset創建像這樣:

data_path = r"C:\Users\matth\Downloads\TRMM_3B42RT\3B42RT_Daily.201001.7.nc4" 
f = Dataset(data_path) 

latbounds = [ -31 , -19 ] 
lonbounds = [ 131, 146 ] 
lats = f.variables['lat'][:] 
lons = f.variables['lon'][:] 

# latitude lower and upper index 
latli = np.argmin(np.abs(lats - latbounds[0])) 
latui = np.argmin(np.abs(lats - latbounds[1])) 

# longitude lower and upper index 
lonli = np.argmin(np.abs(lons - lonbounds[0])) 
lonui = np.argmin(np.abs(lons - lonbounds[1])) 

precip_subset = f.variables['precipitation'][ : , lonli:lonui , latli:latui ] 

這是我迄今所做的使用底圖繪製數據:

m = Basemap(llcrnrlon=131.,llcrnrlat=-31,urcrnrlon=146.,urcrnrlat=-19.) 
m.drawcoastlines() 
m.drawparallels(np.arange(-90., 120., 30.), labels=[1, 0, 0, 0]) 
m.drawmeridians(np.arange(-180., 181., 45.), labels=[0, 0, 0, 1]) 
m.imshow(anomalies_ind) 
plt.show() 

但是,我得到的圖像是不是我想什麼(見圖像如下)。

enter image description here

有誰知道我可以使用底圖,與每個異常找到一個點繪製anomalies_ind

+0

爲什麼沒有人能回答這個問題 –

+1

你沒有包含任何數據。少量行的'anomalies_ind'的小樣本就足夠了。 – omdv

回答

0

imshow只是將您給它的數據繪製爲圖像,覆蓋其他任何東西。所以絕對不是你想要的。既然你沒有給出anomalies_ind的形狀的任何跡象,我已經在這裏舉了一個例子。所有你需要做的就是將lats和lons映射到x/y像素座標,並繪製它們。 'o'參數plot只是說繪製圓圈,而不是線條。

anomalies_ind = [(-29.027008, 135.547227), 
       (-22.774524, 137.824754)] 

lats = np.array(anomalies_ind)[:, 0] 
lons = np.array(anomalies_ind)[:, 1] 


m = Basemap(llcrnrlon=131.,llcrnrlat=-31,urcrnrlon=146.,urcrnrlat=-19.) 
m.drawcoastlines() 
m.drawparallels(np.arange(-90., 120., 30.), labels=[1, 0, 0, 0]) 
m.drawmeridians(np.arange(-180., 181., 45.), labels=[0, 0, 0, 1]) 
#m.imshow(anomalies_ind) 

x, y = m(lons, lats) 
m.plot(x, y, 'o') 

plt.show()