2017-08-02 59 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()