Maps & visualisation
Static plots, choropleths, interactive maps, and exporting images people can use.
Everything on Spatial Workflow about maps & visualisation, in the order that usually works: understand the idea, then run the task, then fix it when it goes wrong. 33 guides in total.
8 learning paths run through this topic — follow one if you would rather work through a route than pick a single guide.
🧭 Start with the concepts
The ideas the how-to guides below assume you already have.
- How to Create Interactive Maps in Python with Folium folium interactive maps python
- How QGIS Styling Works: Renderers, Symbols and Rules qgis renderer symbol explained
- Choosing a Map Projection for Display: What Web Mercator Distorts map projection for display python
- Choropleth Classification Explained: Quantiles, Equal Interval and Natural Breaks choropleth classification schemes
- Kernel Density Explained: What a Heatmap Actually Shows kernel density explained
- Isochrones Explained: Travel Time Areas and What They Assume isochrones explained
- Web Map Tiles Explained: XYZ, Zoom Levels and the Tile Pyramid web map tiles explained
- Vector Tiles Explained: MVT, Layers and Why They Are Not GeoJSON vector tiles explained
⚙️ Then do the task
Step-by-step walkthroughs with code you can copy and adapt.
- How to Plot Maps in Python with GeoPandas and Matplotlib plot map geopandas matplotlib
- How to Create a Choropleth Map in Python with GeoPandas choropleth map geopandas
- How to Save a Map as an Image in Python with Matplotlib save map image matplotlib python
- How to Style Layers and Export Map Layouts from PyQGIS qgis export layout python
- How to Add a Basemap to a GeoPandas Map with contextily geopandas basemap contextily
- How to Add Legends, Labels and a Scale Bar to a GeoPandas Map geopandas map legend labels
- How to Plot Multiple Layers on One Map in GeoPandas plot multiple layers geopandas
- How to Batch-Generate a Map Image for Every Region in Python batch generate maps python
- How to Set Up Jupyter for Python GIS Work jupyter python gis setup
- Your First Python GIS Analysis: From Download to Map in One Script first python gis analysis
- How to Make a Point Density Heatmap in Python point density heatmap python
- How to Find Hotspots with Getis-Ord Gi* in Python getis ord hotspot python
- How to Make a Hillshade from a DEM in Python hillshade python
- How to Generate Isochrones in Python generate isochrones python
- How to Prepare a GeoDataFrame for the Web prepare geodataframe for web
- How to Style Data-Driven Colours in a Web Map data driven web map styling
- How to Add Interactivity and Popups to a Web Map web map popups interactivity
- How to Animate Movement Over Time in Python animate movement python
🔧 When it breaks
The errors this topic produces, with the cause explained rather than just the command.
- Why Does My GeoPandas Map Look Upside Down? geopandas map upside down
- Why Is My GeoPandas Plot Blank or Empty? How to Fix It geopandas plot blank
- My Points Plot in the Ocean: Fixing Swapped Latitude and Longitude points plotting in the ocean geopandas
- My GeoPandas Choropleth Colours Look Wrong: How to Fix It geopandas choropleth colours wrong
- My Folium Map Is Blank or Will Not Display: How to Fix It folium map not showing
- Your Heatmap Looks Wrong: KDE Bandwidth and Cell Size kde bandwidth wrong
- Hillshade Looks Flat, Washed Out or Inverted hillshade inverted
Learning paths through this topic
A curated route rather than a list — the guides in the order that builds on itself.
-
Spatial Statistics
Measure the pattern instead of eyeballing the map.
Open path → -
Terrain & Elevation
Turn a grid of heights into slope, shade, contours and drainage.
Open path → -
Networks & Routing
Distance along the street, not across the rooftops.
Open path → -
Making Maps
Turn a GeoDataFrame into a map someone else can read.
Open path → -
GIS Data Cleaning
Turn messy spatial data into analysis-ready datasets.
Open path → -
QGIS Automation
Automate QGIS with PyQGIS and Processing models.
Open path → -
Publishing Web Maps
Get the data into a browser without shipping the whole dataset.
Open path → -
Movement & Time
Tracks are not points — the order and the clock are the data.
Open path →
Related topics
Subjects that keep coming up alongside this one, most overlap first.