これは、preventing spurious horizontal lines for ungridded pcolor(mesh) dataおよびwhy does pcolor with masked array still fill quadrangles connecting to masked points, and how do I stop this?へのフォローアップの質問です。通常の座標では、座標とデータの両方をマスクすると、経度などのラップアラウンド座標を2つの部分にプロットすることができます。通常の座標系では望ましくない四角形を取得できません。しかし、私はそれが座標をマップするために変換する際に、この解決策は失敗します。通常の座標でカートリストの座標に射影したとき、マスクされた配列を持つpcolorが望ましくない四角形を埋めるのはなぜですか?
#!/usr/bin/env python3.6
from numpy import array, ma
from matplotlib.pyplot import figure, pcolor, savefig, axes
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(ma.masked_where(lons>0, lons), ma.masked_where(lons>0, lats), bts)
pcolor(ma.masked_where(lons<0, lons), ma.masked_where(lons<0, lats), bts)
savefig("/tmp/ok.png")
# now with cartopy
import cartopy.crs as ccrs
proj = ccrs.Mollweide(central_longitude=0)
trans = proj.transform_points(ccrs.Geodetic(), lons, lats)
figure()
ax = axes(projection=proj)
ax.pcolormesh(ma.masked_where(lons>0, trans[:, :, 0]), ma.masked_where(lons>0, trans[:, :, 1]), ma.masked_where(lons>0, bts), transform=proj)
ax.pcolormesh(ma.masked_where(lons<0, trans[:, :, 0]), ma.masked_where(lons<0, trans[:, :, 1]), ma.masked_where(lons<0, bts), transform=proj)
savefig("/tmp/not_ok.png")
を、必要に応じて:
地図座標で、望ましくない四角形が戻って:
正の経度は、正のマップ座標とその逆のいずれにも対応しています現在の投影の中心経度がゼロであるためです。さらに、±180度の経度をマスクすると、同じ状況になります。だから問題は他のところにある。 pcolor
を投影されたマップ座標で2つの部分にプロットするにはどうすればよいですか?
、それはグリッドがここにそうではありませんこれは、ascendinglyソートする必要があること、および全体的な問題を引き起こす可能性のある注目に値するかもしれません。 – ImportanceOfBeingErnest