I want to generate a map of the United States and color each state in using a different shade. Is there a way to do this using Python's basemap?
Basemap allows you to create map plots in python. It extends matplotlib's functionality by adding geographical projections and some datasets for plotting coast lines and political boundaries, among other things. Or use the Anaconda Navigator to install basemap.
Interactive figures The default interactive figure background color has changed from grey to white, which matches the default background color used when saving.
There is a nicely formated example in the Basemap repo on GitHub: fillstates.py. The shapefile (dbf | shp | shx) is also included in the examples folder.
Here is an abbreviated version of the example:
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()
Resulting plot with Texas filled red:
Note that when we load a shapefile the shapes and attributes are stored in map.states
and map.states_info
respectively as lists based on the name
parameter used in the readshapefile
call. So to look up the shape for a specific state we had to build a corresponding list of the state names from the attributes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With