2012-09-03 161 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()