塗りつぶされた長方形をベースマップにプロットする方法を探しています。この方法を使用して長方形のエッジを簡単に描画できましたdrawgreatcircle
が、これらの長方形を実際に塗りつぶす方法(色とアルファを指定)を見つけることができません。
質問する
20161 次
3 に答える
30
matplotlib.patches.Polygon()を軸に直接追加できます。問題は、長方形でプロット座標(プロット上の直線)を定義するか、マップ座標(プロット上の大円)で定義するかです。いずれの場合も、マップ座標で頂点を指定し、Basemapインスタンス(以下の例)を呼び出してそれらをプロット座標に変換しm()
、ポリゴンを自分で作成して、レンダリングする軸に手動で追加します。
プロット座標で定義された長方形の例を次に示します。
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
def draw_screen_poly( lats, lons, m):
x, y = m( lons, lats )
xy = zip(x,y)
poly = Polygon( xy, facecolor='red', alpha=0.4 )
plt.gca().add_patch(poly)
lats = [ -30, 30, 30, -30 ]
lons = [ -50, -50, 50, 50 ]
m = Basemap(projection='sinu',lon_0=0)
m.drawcoastlines()
m.drawmapboundary()
draw_screen_poly( lats, lons, m )
plt.show()
マップ座標で定義された長方形の場合、同じアプローチを使用しますが、プロット座標に変換する前に、マップ空間でラインを補間します。線分ごとに、次のことを行う必要があります。
lats = np.linspace( lat0, lat1, resolution )
lons = np.linspace( lon0, lon1, resolution )
次に、これらのマップ座標をプロット座標に変換し(上記のように、を使用m()
)、プロット座標を使用してポリゴンを再度作成します。
于 2012-09-09T05:14:35.607 に答える
6
アンドリューの答えを使用すると、エラーが発生します
TypeError: len() of unsized object.
ただし、zipをリストにキャストすると、これが修正されます。
完全なコード:
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
def draw_screen_poly( lats, lons, m):
x, y = m( lons, lats )
xy = zip(x,y)
poly = Polygon( list(xy), facecolor='red', alpha=0.4 )
plt.gca().add_patch(poly)
lats = [ -30, 30, 30, -30 ]
lons = [ -50, -50, 50, 50 ]
m = Basemap(projection='sinu',lon_0=0)
m.drawcoastlines()
m.drawmapboundary()
draw_screen_poly( lats, lons, m )
plt.show()
于 2018-05-26T12:20:19.177 に答える
3
上記と同様の答えですが、より基本的なコードです。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
map = Basemap(projection='cyl')
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral',lake_color='aqua')
map.drawcoastlines()
x1,y1 = map(-25,-25)
x2,y2 = map(-25,25)
x3,y3 = map(25,25)
x4,y4 = map(25,-25)
poly = Polygon([(x1,y1),(x2,y2),(x3,y3),(x4,y4)],facecolor='red',edgecolor='green',linewidth=3)
plt.gca().add_patch(poly)
plt.show()
于 2016-11-21T02:57:03.643 に答える