Last reviewed: Next review due:
1. What is QGIS and why journalists use it
QGIS is a free, open-source Geographic Information System — desktop software for storing, analysing and mapping spatial data. A GIS understands that a row of data has a location: a council area, a postcode, a river, a school. That lets you join ordinary tables to geographic boundaries and draw the result as a map. For journalists, it is the bridge between a downloaded dataset and a publishable graphic that shows where a story is happening.
Unlike a quick online map maker, QGIS gives you full control over the projection, the classification and the styling — the exact decisions that determine whether a map informs or misleads. It is the tool behind a great deal of local and national data journalism, and everything below can be done on a standard laptop.
2. Installing QGIS
Download the installer from qgis.org. You will be offered two streams: the Long Term Release (LTR), which is the most stable and best for newsroom work, and the latest release with newer features. Choose the LTR unless you need a specific new tool. The installer also bundles GDAL, the underlying geospatial toolkit, so command-line utilities such as ogr2ogr are available too.
On first launch the interface can look busy. The three things you use constantly are the Layers panel (bottom left, listing what is on the map), the map canvas (the big central view) and the attribute table (the spreadsheet behind any layer, opened by right-clicking it).
3. Loading a base map and vector layers
A base map gives geographic context. The simplest route is the built-in QuickMapServicesplugin (Plugins → Manage and Install Plugins), which adds OpenStreetMap and other tile backgrounds in one click. Load it first so everything else sits on top.
Next add your vector layers — the shapes you care about. Use Layer → Add Layer → Add Vector Layer, then browse to a shapefile (.shp) or GeoJSON (.geojson). Boundary files for UK councils, wards and constituencies come from the ONS Open Geography Portal. If you ever need to convert between formats, GDAL does it from the OSGeo4W shell:
ogr2ogr -f GPKG wards.gpkg wards.geojsonCheck the layer's coordinate reference system (CRS). UK national data is usually in British National Grid (EPSG:27700); web tiles use Web Mercator (EPSG:3857). QGIS reprojects on the fly, but mixing them without care distorts distances and areas.
4. Attribute tables and the all-important code column
Right-click a boundary layer and choose Open Attribute Table. Each row is one area, and among the columns you will find a name and a GSS (ONS) code — a stable identifier such as E06000001 for a local authority. That code, not the name, is your reliable join key. Names change, get abbreviated and carry inconsistent punctuation; codes do not.
Before you go further, confirm your data spreadsheet also carries the same code column and that it is stored as text. A code read as a number can silently lose a leading zero and break every join.
5. Joining a data table to boundary geometry
This is the core skill. Add your statistics as a delimited-text or CSV layer (Layer → Add Layer → Add Delimited Text Layer; tick “No geometry” since it is a plain table). Then open the boundary layer's Properties → Joins, click the plus, and match the join field in your table to the target field (the GSS code) in the boundaries.
Reopen the boundary attribute table and your council figures now appear as extra columns. If they are blank, the codes did not match — check for stray spaces, differing case, or a text-versus-number mismatch. A useful sanity check is to compare the joined row count against the number of areas you expected.
Joins are virtual and recalculated each time. To freeze the result, right-click the layer and choose Export → Save Features As, writing a new GeoPackage.
6. Choropleth (graduated) styling
A choropleth shades each area by a value. Open the layer's Properties → Symbology and switch the renderer from Single Symbol to Graduated. Choose the value column, pick a colour ramp, set the number of classes, and click Classify.
The single most important rule: map a rate, not a raw count. A map of the number of burglaries will just be a map of where people live. Instead map burglaries per 1,000 households. If your table lacks a rate, calculate one in the Field Calculator:
("offences" / "households") * 1000Use a sequential colour ramp (light to dark) for a single quantity, and a diverging ramp only when there is a meaningful midpoint, such as change from an average. Avoid rainbow ramps, which imply categories that are not there.
7. Classification: quantiles versus natural breaks
The classification method decides where the boundaries between colour bands fall — and it can completely change the story a map appears to tell. There is no neutral default, so choose consciously:
- 1Quantiles — equal number of areas per band. Guarantees a full colour spread, but can exaggerate tiny differences and hide large ones.
- 2Natural breaks (Jenks) — bands drawn at natural gaps in the data. Usually the most faithful for skewed distributions; the default worth reaching for.
- 3Equal interval — the value range split into even steps. Honest for evenly spread data, but often dumps most areas into one band.
- 4Standard deviation — bands measured from the mean. Useful for showing which areas are unusual, but hard for general readers to interpret.
Whatever you pick, try two or three methods and compare. If the headline pattern only appears under one classification, that is a warning sign, not a finding.
8. Labels and a legend
Turn on labels in Properties → Labels → Single Labels, choosing the name column. Add a halo (a light buffer around the text) so labels stay readable over dark shading, and do not label every area if the map becomes cluttered — label the ones your story names.
A choropleth is meaningless without a legend that states the units and the class breaks. Make sure the legend spells out exactly what the colours represent, for example “burglaries per 1,000 households, 2024”, so no reader can mistake a rate for a count.
9. Exporting a publication map
Never screenshot the canvas. Open Project → New Print Layout, which is a proper page designer. Add the map frame, then a legend, a scale bar, a north arrow, a title, and — crucially — a credit line naming the data source and the date.
Export at 300 dpi or more for print, or as SVG or PDF for a vector file a designer can rescale cleanly. For the web, a PNG around 150 dpi is fine. Keep the QGIS project file (.qgz) so the map is reproducible and can be corrected or updated later.
10. The ethics of map framing
Every map is an argument. The classification, the colour ramp, the number of bands and the choice of rate versus count are all editorial decisions that shape what the reader believes. A map is not more objective than a chart just because it looks like geography.
- Beware the large-area illusion — sparsely populated rural areas dominate the visual field even when few people live there.
- Small counts produce unstable rates; a tiny ward can top a map on a handful of events. Consider suppressing or flagging low-denominator areas.
- State your classification method and source in the caption so the map can be checked.
- Do not cherry-pick the one classification that produces the sharpest divide.
11. Geoprocessing you will grow into
Once joins and choropleths feel comfortable, QGIS opens up a set of analytical tools that answer richer questions. You do not need them on day one, but they are worth knowing exist:
- Buffer — draw a zone a set distance around features, for example how many homes sit within 400 metres of a proposed site.
- Spatial join — attach data to features by location rather than by code, such as counting incidents that fall inside each ward.
- Dissolve — merge smaller areas into larger ones, rolling wards up into councils.
- Clip — cut one layer to the outline of another, to focus a national dataset on your patch.
These live under the Processing Toolbox and Vector menus. Treat spatial joins with care: the result is only as trustworthy as the geographies you feed in, so prefer an official code lookup over a spatial guess whenever one exists.
12. Mapping checklist
- I joined my data on the GSS code, not the area name.
- I checked that no areas came back blank after the join.
- I mapped a rate per head or per household, not a raw count.
- I tried more than one classification and chose the most faithful.
- My legend states the units, the year and the class breaks.
- My exported map carries a source credit and a date.
- I saved the .qgz project so the map is reproducible.
Get the boundaries
UK council, ward, constituency and small-area boundaries come from the ONS Open Geography Portal. Our boundary-data guide explains which geography to pick and where the codes come from.
Frequently asked questions
Is QGIS really free, and how does it compare to ArcGIS?
What file formats will I encounter, and which should I prefer?
My data table will not join to the boundaries. What is wrong?
Which classification method should I use for a choropleth?
How do I get a high-resolution map out of QGIS for print or the web?
Related guides
Primary sources
- QGIS — download and documentation— QGIS Project
- ONS Open Geography Portal — UK boundaries— Office for National Statistics
- GDAL / OGR geospatial toolkit— OSGeo
- QGIS training manual and user guide— QGIS Project
- British National Grid (EPSG:27700)— EPSG