Five Python scripts that take a plain CSV and produce a figure you'd be happy to put in a report. No ArcGIS. No QGIS. No GIS degree.
What's inside
Each one is a single self-contained file with a configuration block at the top. Change the paths and the title, run it, get your figure.
Shaded regions from your data — one row per region. The classic "map by numbers" look.
01_choropleth_map.py
Curved origin→destination lines with width proportional to volume. Migration, shipping, commuting, trade.
05_flow_map.py
Dot size and colour both encode a value. Good when one number isn't enough to tell the story.
04_bubble_map.py
Hexbin aggregation that shows where points cluster. For customer concentration, incidents, traffic.
03_heatmap.py
Plot points on a coordinate grid, optionally colour-coded by category.
02_poi_map.pyWorking sample data for every script, a boundary GeoJSON example, a requirements file, and full setup notes with troubleshooting.
sample_data/ · requirements.txt · README.mdHow it works
Every script ships with sample data, so you can run it before touching your own — that way you know your setup works first.
Why it's worth it
Writing a clean choropleth from scratch — proper projection, readable labels, a colour scale that doesn't look broken, a legend that isn't cut off — takes most people a full evening of fighting matplotlib.
These are the versions you'd end up with after that evening. Except they're already written, commented, and tested. If this saves you one afternoon, it's paid for itself.
Pricing
Download the pack, use it forever.
Questions
No. If you can edit a few lines of Python and point a script at a CSV, you're set.
No. Everything runs on free, open-source Python libraries — pandas, matplotlib and geopandas.
Save it as CSV first. The scripts read CSV; the README explains the exact column format each one expects.
Yes — in reports, papers, client work, presentations. The only thing you can't do is resell the templates themselves as a product.
That's a font setting, not a bug — the README has the two lines of code that fix it.
Email me. I'd rather help you get your map made than have you stuck with a pack you can't use.