2011-09-28 16 views

Respuesta

16

Hay un ejemplo muy bien formateado en el repositorio Basemap en GitHub: fillstates.py. El shapefile (dbf | shp | shx) también se incluye en el examples folder.

Aquí es una versión abreviada del ejemplo:

import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap 
from matplotlib.patches import Polygon 

# create the map 
map = Basemap(llcrnrlon=-119,llcrnrlat=22,urcrnrlon=-64,urcrnrlat=49, 
     projection='lcc',lat_1=33,lat_2=45,lon_0=-95) 

# load the shapefile, use the name 'states' 
map.readshapefile('st99_d00', name='states', drawbounds=True) 

# collect the state names from the shapefile attributes so we can 
# look up the shape obect for a state by it's name 
state_names = [] 
for shape_dict in map.states_info: 
    state_names.append(shape_dict['NAME']) 

ax = plt.gca() # get current axes instance 

# get Texas and draw the filled polygon 
seg = map.states[state_names.index('Texas')] 
poly = Polygon(seg, facecolor='red',edgecolor='red') 
ax.add_patch(poly) 

plt.show() 

parcela resultante con Texas, lleno de color rojo:

Resulting plot with Texas filled red

Tenga en cuenta que cuando cargamos un archivo de formas las formas y atributos se almacenan en map.states y map.states_info respectivamente como listas basadas en el parámetro name utilizado en la llamada readshapefile. Entonces, para buscar la forma de un estado específico, tuvimos que construir una lista correspondiente de los nombres de estado de los atributos.

+0

Eso es realmente genial. Si quiero poner una estrella en un lat/lon particular, ¿cómo lo agregaría? – vy32

+0

@ vy32 aquí hay un buen [ejemplo de trazado de datos de punto en un mapa] (https://www.getdatajoy.com/examples/python-plots/plot-data-points-on-a-map), todas las los estilos de marcador se pueden encontrar en [la documentación de matplotlib] (http://matplotlib.org/api/markers_api.html), específicamente '*' es el marcador de inicio. – Weston

Cuestiones relacionadas