2017-11-17 21 views
1

최근에 저는 xarray를 사용하여 여러 NetCDF 파일을로드하고 cartopy를 사용하여 플롯했습니다.xarray.DataArray.roll 메서드가 원치 않는 아티팩트를 만듭니다.

오늘 나는 흥미로운 것을 발견했습니다. 관심 분야에 대해서는 20W에서 40E 사이의 경도를 선택해야합니다. 의도적으로 loon은 0에서 0-360까지 시작하기 때문에 NCL 또는 지형 공간 데이터를위한 다른 특정 도구 상자와 같은 한 가지 방법으로이 작업을 수행 할 수 없습니다. KEdiff_mean.sel(lat=slice(-50, -10),lon=slice(-20,40))isel(lon=slice(-200,400) 대신 3600 * 1800 글로벌 그리드를 호출하면 빈 데이터 배열이 반환 될 것이고이 멋진 DataArray.roll 메서드를 발견하게됩니다.

경도 차원에 따라 DataArray 롤링, 나는 다음 KEdiff_mean.roll(lon=1800).isel(lon=slice(1600,2200)).sel(lat=slice(-50, -10))

이 흥미 롭다 무슨, 내가 DataArray.plot를 사용하여 그릴 때, 나는이 이상한 가로 줄무늬를 가지고 0도 선을 넘어, 내가 원하는 경도를 선택할 수 있습니다 값이없는 영역에 적용됩니다. 롤 방식이 예상대로 작동하지 않거나 뭔가 놓쳤으나 줄무늬 이외의 줄거리가 정확합니다. 아무도 조명을 비출 수 있습니까? 이 순환 경도 선택을 처리하는 데 권장되는 방법은 무엇입니까? 어쩌면 0-360에서 -180 사이의 경도 좌표를 기본적으로 180으로 바꿀 수 있습니까? 고맙습니다!

이 올바른 플롯이다 : 나는 음모의 세계적으로 설정 한 다음 범위를 플롯 Correct plot

롤 호출 될 때 : Roll before selection

+0

나는 수동 0-360에 경도 값을 포장하는 것은 참으로이 문제를 해결할 것이라고 생각 - 그것은 확실히이다 내가 먼저 시도 할 것. – shoyer

답변

0

나는에 무슨 일이 일어나고 있는지 어떤 생각을 가지고 말할 수 없다 땅에 줄무늬가 있지만, 하나의 해킹 내가

hs = xr.open_dataarray('hs') # 2D file 
mask = hs.where(hs > 0) # Keep points with data > 0, set others to NaN 
new_var = new_var.where(mask > 0) # new_var should be 2D 

또 다른 헥타르를 사용하여 내 웨이브 데이터를 xr.where 예를 사용하여 원본 데이터에서 마스크를 사용하는 것입니다 CK (나는 ​​내가 당신의 질문에 대답하고 있지 않다 알고) 데이터를 플롯과 땅 기능을 추가하는 것입니다

import cartopy.feature as cfeature 
# ... 
ax.add_feature(cfeature.LAND, facecolor='white')