Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Color states with Python's matplotlib/basemap

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?

like image 982
heyitsbmo Avatar asked Sep 28 '11 16:09

heyitsbmo


People also ask

How do you define a basemap in python?

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.

What are the matplotlib default colors?

Interactive figures The default interactive figure background color has changed from grey to white, which matches the default background color used when saving.


1 Answers

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:

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.

like image 170
Weston Avatar answered Sep 20 '22 14:09

Weston