2012-09-03 30 views
10

私は、ベースマップ上に塗りつぶした矩形をプロットする方法を探しています。私は簡単にdrawgreatcircleメソッドを使って矩形の辺を描くことができましたが、実際にこれらの矩形を塗りつぶす方法(色とアルファを指定する方法)を見つけることができません。ベースマップに長方形を描く方法

答えて

24

matplotlib.patches.Polygon()を軸に直接追加できます。問題は、四角形がプロット座標(プロット上の直線)またはマップ座標(プロット上の大きな円)で定義されるかどうかです。いずれにしても、マップ座標で頂点を指定し、Basemapインスタンス(下の例ではm())を呼び出して、それらをプロット座標に変換し、Polygonを自分で作成し、レンダリングする軸に手動で追加します。同じアプローチを使用して、マップ座標で定義された長方形の場合

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()と上記のように、)座標をプロットし、再びプロット座標を持つポリゴンを作成するための座標変換します。

1

上記と同様の答えが、より基本的なコード:

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() 
関連する問題