What has been missing for a long time was good map libraries. Plotting capabilities were fine, but basemap support of the existing libraries was very limited. For example, the popular Matplotlib-basemap has great plot types (contour maps, heatmaps, ...) but can't show any high-resolution maps: it only has country/state shapes or whole-world images. Consequently, it's useless for drawing city or street level maps, unless you want to set up your own tile server (you don't).
Along comes Folium, a library that generates interactive maps in HTML format based on Leaflet.js. It supports, among others, OpenStreetMap and MapBox base layers which look great and provide enough details for large-scale maps.
Here is an example that shows some GPS data I cleaned up with a Kalman filter:
def plot(points, center): map_osm = folium.Map(location=center, zoom_start=16, max_zoom=23) map_osm.line(locations=points) map_osm.create_map(path='folium-example.html')
Here's what it looks like. I find it pretty neat, especially given that it took only 3 lines of code to create: