2016-04-19 38 views
1

等高線マップ上にハッチング(ドット、ハッシュなど)を追加しようとしています。このような孵化は、統計的に有意な等高線または一定の基準を有する等高線のみを表すことができる。次の自然の記事の画像(2番目と3番目のプロット)http://www.nature.com/articles/srep16853/figures/3のように。輪郭マップよりも有意な点を表す過剰なパッチ

NOAAデータavailableからの降水量のプロットを次の図に示します。

import numpy as np 
import sys 
import netCDF4 as nc 
import matplotlib.pyplot as plt 
import matplotlib.mlab as m 
import mpl_toolkits.basemap as bm 
import os 
sys.path.insert(0, '../');import py4met as sm;reload(sm) 

#- Reading data for a timeslice, latitude, and longitude: 
diri_output="./" 
diri="./" 
tmp_file = nc.Dataset(diri+"precip.mon.mean.nc","r") 
print(tmp_file.variables) 
p_pre = tmp_file.variables['precip'] 
lat  = tmp_file.variables['lat'][:] 
lon  = tmp_file.variables['lon'][:] 
time = tmp_file.variables['time'] 
tmp_file.close 


lat1=np.min(lat) 
lat2=np.max(lat) 
lon1=np.min(lon) 
lon2=np.max(lon) 

[lonall, latall] = np.meshgrid(lon[:], lat[:]) 
plt.figure(num=None, figsize=(8+4, 6+4), dpi=80, facecolor='w', edgecolor='k')  
mapproj = bm.Basemap(projection='cyl',llcrnrlat=lat1, llcrnrlon=lon1,urcrnrlat=lat2, urcrnrlon=lon2,resolution='l') 
mapproj.drawcoastlines() 
mapproj.drawmapboundary(fill_color='white') 
mapproj.drawcountries() 
x, y = mapproj(lonall, latall) 
plt.contourf(x,y,p_pre[240,:,:],cmap=plt.cm.GnBu) 
plt.colorbar(orientation='horizontal',pad=0.05,shrink=0.6) 
plt.title("title") 
xx,yy=np.where(p_pre[240,:,:] >= 20) 
sig=np.copy(p_pre[0,:,:]) 
sig[:,:]=1 
sig[xx,yy]=0 
#plt.contourf(x,y,sig,hatches=['.']) 
plt.show() 

Iが20mm以上のすべての輪郭を孵化したいので、私は

plt.contourf(X、Y、SIG、ハッチ= [ ''])

上記のコマンドを使用

しかし、それは動作しませんでした(マップ上のあらゆる場所に特定の基準を持つ等高線だけでなく)ので、私はそれをコメントしました。 アイデア

答えて

0

contourfでハッチを使用する方法のデモについては、matplotlib example pageを参照してください。あなたの問題に特に関連性があるのは、(1)contourfは、どの値が色付きおよび/または斜線を付けるかの境界を確立するために必要なキーワードlevelです。(2)空の文字列""は、ハッチ。

だから、代わりにあなたが試し

levels = [p_pre[240,:,:].min(), 20, p_pre[240,:,:].max()] 
plt.contourf(x, y, p_pre[240,:,:], levels=levels, hatches=["", "."], alpha=0) 

をコメントアウトしているplt.contourfラインの私はトラブルあなたにリンクされたデータから、あなたのプロットを再作成していたので、私はそれを用いた以下の画像を作るためにいくつかのランダムデータを生成し上記の原則

enter image description here

+0

ありがとう、それは私のために働く。さて、私は使用されたハッチングの数が-1の数であることを理解しました。したがって、異なるハッチングで異なる輪郭レベルをハッチすることができます。再度、感謝します。 – kernel

+0

matplotlibにこのような機能があることを嬉しく思っています.MatLabでどのようにパッチを当てていますか?そのような組み込み機能が見つからなかったのですが、MatLabファイル交換で次のような寄与をしました[http://www.mathworks .com/matlabcentral/fileexchange/30733-hatchfill)。 – kernel

関連する問題