2016-10-11 4 views
1

날씨 모델의 출력을 분석 중이며, python 모듈 netCDF4를 사용하고 mpl_toolkits Basemap으로 이미지를 만듭니다.데이터에서 포인트를 쉽게 추출 할 수 있습니까?

저는 약간의 공기압 등고선을 만들었습니다. 이제 나는 바람에 미늘을 더하고 결국 a plot with only wind over the seas으로 끝납니다. 주변을 둘러 본 후, barb 함수가 나중에 호출 되더라도 basemap 함수 fillcontinents()가 실제로이 바람 미늘을 덮는 것을 발견했습니다. 따라서 fillcontinents() 함수를 제거하면 all wind barbs as wanted이됩니다.

대륙을 가득 채울 수있는 방법이 있습니까? 아직 내 바브가 모두 음모에 있습니까?

내 코드는 다음과 같이 약간 보이는 (내가 탈락 한 일부 그래픽 매개 변수, 그들은 내 질문에 대한 중요하지 않습니다) :

: 폴의 도움으로
from netCDF4 import Dataset 
from mpl_toolkits.basemap import Basemap 
import numpy as np 

file = 'W:/projects/wrfout_d01_2013-10-27_120000' 
data = Dataset(file) 

# Load grid 
longrid = data.variables['XLONG'][:].squeeze() # Removes time dimension 
latgrid = data.variables['XLAT'][:].squeeze() 

# Load surface pressure 
p_surf = data.variables['PSFC'][:].squeeze() 

# Load wind components 
u = data.variables['U10'][:].squeeze() 
v = data.variables['V10'][:].squeeze() 

m = Basemap(projection='cyl', resolution='l', 
        llcrnrlat= 42., llcrnrlon= -12., 
        urcrnrlat= 57., urcrnrlon= 12.) 
m.drawcountries() 
m.drawcoastlines() 
m.fillcontinents('#FAF0E6') ### Blanking out this line gives barbs over land 
m.drawmeridians(np.arange(-180,180,10),labels=[0,0,1,1]) 
m.drawparallels(np.arange(-90,90,10),labels=[1,0,0,0]) 

x,y = m(longrid,latgrid) 
ct = m.contour(x,y,p_surf, colors='#1C8CFC') ### So far, so good 
ct.clabel(fmt='%1i') 

m.barbs(x,y,u,v) 

plt.savefig('p_surf-barbs-map.png') 
+0

는'fillcontinents' 예술가처럼 나에게 보이는은'barbs' 예술보다 더 높은 zOrder를있다 ist. 필 콘티넨탈 후에 미늘을 그릴지라도, 필 콘티넨탈 아티스트는 여전히 정상에 오르게됩니다. 어떤 이유로'베이스 맵 '을 가져올 수 없습니다. barbers에 zorder (예 : 100)를 전달할 수 있는지 또는'Basemap.barbs'가'set_zorder' 메소드 (artist = m.barbs (x, y, u, v); artist.set_zorder (100)')? – Paul

+0

@Paul 당신은 나를 올바른 길로 데려갔습니다. 문제는 이제 고쳐졌습니다. 감사합니다! 바브를 별도의 변수로 만들 필요없이 m.barbs (x, y, u, v, zorder = 100)라고 말할 수 있습니다. –

답변

0

내가 해결책을 발견 미늘을 플롯 할 때

가 높은 값으로 변수 zOrder를 추가 (I 100을 사용)이 같은 :

m.barbs(x, y, u, v, zorder=100) 
관련 문제