2017-10-03 12 views
1

described hereの問題を緩和するため、私はpcolorプロットを2つの補完部分に描画しようとしています。私はそれぞれ緯度と経度に対応するXYのデータを持っています(実際にはこれは投影座標にcartopyによって変換されますが、手元の問題はそれとは独立しています)。経度はアンチメリディアンの周りを包み込むことがあり、四角形が地球全体に描かれます。これを防ぐために、私は、以下に示すように、個別に二つの部分を描画しようとしている:マスクされた配列を持つpcolorがマスクされた点に接続する四角形をまだ埋めているのはなぜですか?

は今、私はすべての正の経度をマスクプロットは、多かれ少なかれ、私はそれを期待するようになります
#!/usr/bin/env python3.6 

from numpy import array, ma 
from matplotlib.pyplot import figure, pcolor, savefig 

lons = array([[ 100., 120., 140., 160., 180.], 
     [ 120., 140., 160., 180., -160.], 
     [ 140., 160., 180., -160., -140.], 
     [ 160., 180., -160., -140., -120.], 
     [ 180., -160., -140., -120., -100.], 
     [-160., -140., -120., -100., -80.]]) 

lats = array([[ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.]]) 

bts = array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24], 
     [25, 26, 27, 28, 29]]) 

figure() 
pcolor(lons, lats, ma.masked_where(lons>0, bts)) 
savefig("/tmp/ok.png") 

figure() 
pcolor(lons, lats, ma.masked_where(lons<0, bts)) 
savefig("/tmp/not_ok.png") 

positive longitudes masked

が、私はすべての負の経度をマスクプロットは、まだすべての軸の上に四角形をプロット:

negative longitudes masked

2番目のプロットでは、正の経度に対応する四角形だけを描画したいと思います。それはまだマスクされた値に接続しているのですが、どうしたらこれをやめることができますか?

答えて

2

私は他の質問についての私のコメントで十分ではなかったかもしれませんが、私はグリッドがマスクされている必要があり、値ではないことを意味します。

from numpy import array, ma 
import matplotlib.pyplot as plt 

lons = array([[ 100., 120., 140., 160., 180.], 
     [ 120., 140., 160., 180., -160.], 
     [ 140., 160., 180., -160., -140.], 
     [ 160., 180., -160., -140., -120.], 
     [ 180., -160., -140., -120., -100.], 
     [-160., -140., -120., -100., -80.]]) 

lats = array([[ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.], 
     [ 0., 10., 20., 30., 40.]]) 

bts = array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24], 
     [25, 26, 27, 28, 29]]) 

fig, (ax,ax2) = plt.subplots(ncols=2) 
ax.pcolor(ma.masked_where(lons>0, lons), 
     ma.masked_where(lons>0, lats), 
     ma.masked_where(lons>0, bts)) 

ax2.pcolor(ma.masked_where(lons<0, lons), 
     ma.masked_where(lons<0, lats), 
     ma.masked_where(lons<0, bts)) 

plt.show() 

enter image description here

+0

素晴らしいです。残念ながら、これは投影された地図座標では再び失敗するようですので、[別の質問に尋ねました](https://stackoverflow.com/q/46548044/974555)。 – gerrit

関連する問題