2012-09-03 65 views
10

我正在尋找一種在底圖上繪製實心矩形的方法。我可以很容易地使用drawgreatcircle方法繪製矩形的邊緣,但我找不到實際填充這些矩形(指定顏色和alpha)的方法。如何在底圖上繪製矩形

回答

24

您可以直接將matplotlib.patches.Polygon()添加到您的座標軸。問題是你是否想要你的矩形定義繪圖座標(繪圖上的直線)或地圖座標(繪圖上的大圓圈)。無論哪種方式,您都可以在地圖座標中指定頂點,然後通過調用底圖實例(下面的示例中的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()),然後重新創建一個多邊形的情節座標。

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()