Adding Data Points to Shapefiles

In this post I’ll discuss how to plot data points on a shapefile. In a previous post I discussed how to install basemap using pip, the package manager for Python. Since basemap is an extension of matplotlib, we have a lot of familiar plotting functions and options at our disposal. Of particular importance is the ability to use projection data in plotting the shapefile, and plotting the data points.

import numpy as np
import scipy.stats
from mpl_toolkits.basemap import Basemap

After we import what we need, we can create a map object, m, with some projection. Here, we’ve used the Miller cylindrical projection, which is better for stuff nearer the equator than the poles.

Next, we call the readshapefile() method of the map object, m, to incorporate the data from the shapefile. Then, after generating some uniformly distributed data points, we call the scatter() method of the map object to plot the data points.

# the map, a Miller Cylindrical projection
m = Basemap(projection='mill', llcrnrlon=-104. ,llcrnrlat=28, urcrnrlon=-96. ,urcrnrlat=34.)

# incorporate the shapefile
s = m.readshapefile('./Texas_Counties', 'texascounties')

# generate some points
x = scipy.stats.uniform(-102,2).rvs(3)
y = scipy.stats.uniform(30,2).rvs(3)

# superimpose the points on the shapefile
m.scatter( x, y, marker='o', facecolor='none', edgecolor='b', alpha=0.5, latlon=True )

The latlon=True argument of the scatter() function is particularly important. This informs scatter() that the data points should be interpreted as latitude and longitude. Beyond that, the rest of the scatter() arguments are familiar from the matplotlib library.