2017-11-27 20 views
0

날씨 모델 출력에서 ​​강수량 데이터를 플로팅하고 있습니다. 나는 contourf를 사용하여 내가 가지고있는 데이터를 컨투어하고있다. 그러나 나는 "0"레벨을 채우기를 원하지 않는다. (오직 값> 0). 이것을 할 수있는 좋은 방법이 있습니까? 레벨을 뒤범벅하려고했습니다.Pyplot contourf가 "0"레벨로 채워지지 않습니다.

는 여기에 내가 플롯에 사용하고 코드입니다 :

m = Basemap(projection='stere', lon_0=centlon, lat_0=centlat, 
      lat_ts=centlat, width=width, height=height) 

m.drawcoastlines() 
m.drawstates() 
m.drawcountries() 
parallels = np.arange(0., 90, 10.) 
m.drawparallels(parallels, labels=[1, 0, 0, 0], fontsize=10) 
meridians = np.arange(180., 360, 10.) 
m.drawmeridians(meridians, labels=[0, 0, 0, 1], fontsize=10) 

lons, lats = m.makegrid(nx, ny) 
x, y = m(lons, lats) 
cs = m.contourf(x, y, snowfall) 
cbar = plt.colorbar(cs) 
cbar.ax.set_ylabel("Accumulated Snow (km/m^2)") 
plt.show() 

그리고 여기에 내가 갖는 이미지입니다. 나 자신을 일을 알아낼 수 있었다

0 0 0 0 0 0 
0 0 1 1 1 0 
0 1 2 2 1 0 
0 2 3 2 1 0 
0 1 0 1 2 0 
0 0 0 0 0 0 
+0

'snowfall'과 유사한 데이터 세트를 모의 할 수 있습니까?하지만 질문에 포함될 수 있습니까? –

+0

물론, 그 정보로 원래의 게시물을 편집했습니다. – rootusercyclone

답변

0

levels0을 포함하지 않으면 0 레벨에 등고선을 그릴 수 없습니다.

import numpy as np 
import matplotlib.pyplot as plt 

a = np.array([ 
     [0, 0, 0, 0, 0, 0], 
     [0, 0, 1, 1, 1, 0], 
     [0, 1, 2, 2, 1, 0], 
     [0, 2, 3, 2, 1, 0], 
     [0, 1, 0, 1, 2, 0], 
     [0, 0, 0, 0, 0, 0] 
     ]) 

fig, ax = plt.subplots(1) 

p = ax.contourf(a, levels=np.linspace(0.5, 3.0, 11)) 
fig.colorbar(p) 

plt.show() 

수율 :

enter image description here

대안이 0 인 모든 데이터 포인트를 마스크한다 : 예를 들어

,174,515 : 모양

p = ax.contourf(np.ma.masked_array(a, mask=(a==0)), 
     levels=np.linspace(0.0, 3.0, 13)) 
fig.colorbar(p) 

enter image description here

나는 당신이 원하는 음모와 가장 일치하는 것이 당신에게 달려 있다고 생각합니다.

0

, 나는이 문제를 해결의 발견 두 가지 방법이 있습니다 :

Precipitation Plot

예 강설 데이터 세트는 같을 것이다. 0.01로

np.ma.masked_less(snowfall, 0.01) 

또는

  • 설정 플롯의 수치를 사용하여 설정

    1. 모든 데이터는 데이터의 < 0.01을 마스크 -> 최대 어떤 값

      levels = np.linspace(0.1, 10, 100) 
      

      다음으로

      cs = m.contourf(x, y, snowfall, levels) 
      

    는 그 옵션 1은 나를 위해 최선의 일을 발견했다.