2012-09-03 26 views
10

Estoy buscando una forma de trazar rectángulos llenos en un mapa base. Podría dibujar fácilmente los bordes del rectángulo usando el método drawgreatcircle, pero no puedo encontrar una manera de llenar realmente estos rectángulos (especificando color y alfa).Cómo dibujar rectángulos en un mapa base

Respuesta

24

Puede agregar un matplotlib.patches.Polygon() directamente a sus ejes. La pregunta es si quieres que tus rectángulos definan las coordenadas de la trama (líneas rectas en la trama) o en las coordenadas del mapa (círculos grandes en la trama). De cualquier forma, especifique los vértices en las coordenadas del mapa y luego los transfiera a las coordenadas del trazado llamando a la instancia del mapa base (m() en el ejemplo siguiente), construya un polígono usted mismo y agréguelo manualmente a los ejes que se van a representar.

Para los rectángulos definidos en la parcela coordenadas, he aquí un ejemplo:

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

Para los rectángulos definidos en las coordenadas del mapa, utilice el mismo método, pero interpolar su línea en el espacio de mapa antes de transformarse para trazar coordenadas. Para cada segmento de línea, usted tiene que hacer:

lats = np.linspace(lat0, lat1, resolution) 
lons = np.linspace(lon0, lon1, resolution) 

Entonces transformar estas coordenadas del mapa para trazar coordenadas (como el anterior, con m()) y de nuevo crear un polígono con las coordenadas de la trama.

1

respuesta Similar al anterior, pero el código más básico:

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