2017-10-03 6 views
1

これは、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") 

を、必要に応じて:

地図座標で

As desired

、望ましくない四角形が戻って:

Not as desired

正の経度は、正のマップ座標とその逆のいずれにも対応しています現在の投影の中心経度がゼロであるためです。さらに、±180度の経度をマスクすると、同じ状況になります。だから問題は他のところにある。 pcolorを投影されたマップ座標で2つの部分にプロットするにはどうすればよいですか?

答えて

1

私は、this issueに従ってカートリストに導入された投影の限界付近で座標を折り返すための回避策であることを意図したコードが、実際にはうまくいっていないという印象を受けました。このコードは、異なる領域をマスキングするのと同様のことを試みますが、何らかの形で望ましい結果が得られません。

今のところ、世界中に巻きつけられたファセットの問題は、pcolormeshにのみ存在し、pcolorには存在しません。おそらく両方の場合に使用される異なるメッシングのためです。
したがって、pcolorを使用する場合、プロットは必要に応じて表示されます。上記以外にも

import cartopy.crs as ccrs 
proj = ccrs.Mollweide(central_longitude=0) 
trans = proj.transform_points(ccrs.Geodetic(), lons, lats) 
plt.figure() 
ax = plt.axes(projection=proj) 
ax.pcolor(ma.masked_where(trans[:, :, 0]>0, trans[:, :, 0]), ma.masked_where(trans[:, :, 0]>0, trans[:, :, 1]), ma.masked_where(trans[:, :, 0]>0, bts), transform=proj) 
ax.pcolor(ma.masked_where(trans[:, :, 0]<0, trans[:, :, 0]), ma.masked_where(trans[:, :, 0]<0, trans[:, :, 1]), ma.masked_where(trans[:, :, 0]<0, bts), transform=proj) 

plt.show() 

enter image description here

+0

、それはグリッドがここにそうではありませんこれは、ascendinglyソートする必要があること、および全体的な問題を引き起こす可能性のある注目に値するかもしれません。 – ImportanceOfBeingErnest

関連する問題