Appearance
To map locations with uncertainty, stop dropping crisp pins and instead encode the doubt visually — a buffer circle sized to the error radius, reduced opacity, or a confidence-graded symbol — so readers never mistake an approximation for a survey. The root problem behind almost every "misleading historical map" is storing a single exact coordinate with no record of how reliable it is. The fixes below address each symptom: false precision, dropped places, and untraceable placements.
Why do my approximate points look falsely precise?
Symptom: a sharp pin sits at exact coordinates for a place you only know was "near Norwich." Root cause: you stored one latitude/longitude and no measure of error, so the renderer draws a dimensionless dot implying metre accuracy. The fix is to store and show an uncertainty radius. Replace the pin with a buffer circle whose size reflects how confident you are:
python
import geopandas as gpd
gdf = gpd.read_file("places.geojson").to_crs(3857) # metres
# uncertainty_m holds the error radius per place
gdf["geometry"] = gdf.apply(
lambda r: r.geometry.buffer(r["uncertainty_m"]), axis=1
)
gdf.plot(alpha=0.3, edgecolor="grey") # fuzzy area, not a crisp pointA 50-metre buffer reads as confident; a 5-kilometre buffer honestly signals a vague placement. The reader sees the doubt instead of inferring false certainty.
How should I store uncertainty in the first place?
You cannot map what you did not record. The root cause of unfixable maps is data with no provenance. Add explicit columns up front:
| Column | Holds | Example |
|---|---|---|
lat, lon | Best-estimate coordinate | 52.63, 1.30 |
uncertainty_m | Error radius in metres | 2500 |
confidence | Categorical confidence | low / medium / high |
geocode_method | How it was located | "parish centroid" |
source | Where the placement came from | "Bryant 1826 map" |
With these, you can filter to high-confidence points, style by confidence, and defend every dot later. Without them, you are stuck.
What do I do with places I cannot locate at all?
Symptom: your map looks clean, but it quietly excludes the 18% of records you could not geocode — biasing the picture toward well-documented places. Root cause: silently dropping ungeocoded rows. The fix is to make absence visible:
- Keep ungeocoded records with a
geocode_status = "unlocated"flag and a reason. - Report the count and proportion in the caption: "412 of 2,300 entries (18%) could not be located."
- Optionally list them off-map, or place at a low-confidence regional centroid clearly styled as such.
Hiding the unlocatable is a form of survivorship bias dressed as a tidy map.
How do I visually encode different confidence levels?
Once confidence is stored, let the symbol carry it. Effective encodings, roughly in order of clarity:
- Buffer radius — bigger circle = more uncertain (best for spatial error).
- Opacity — fainter = less confident.
- Symbol shape — solid pin for surveyed, hollow or dashed for inferred.
- Colour value — a sequential confidence ramp (avoid hue-only for accessibility).
Combine at most two encodings; stacking four overwhelms the reader. A common honest pairing is radius for spatial error plus a hollow outline for "inferred from a centroid rather than a record."
When should I abandon points for a density surface?
Symptom: individual coordinates are each so uncertain that mapping them as points overstates precision everywhere. Root cause: forcing point geometry onto fundamentally vague data. The fix is to aggregate honestly into a kernel density surface, which shows where activity concentrated without asserting exact locations:
python
# When points are individually unreliable, a smoothed density reads honestly
import seaborn as sns
sns.kdeplot(x=gdf["lon"], y=gdf["lat"], fill=True, bw_adjust=0.5)Always state the smoothing bandwidth, because a density surface can imply structure that is really just the smoother. Used carefully, it is often the most truthful view of badly geolocated historical data.
How do I review an uncertainty map before publishing?
Run a quick audit: (1) does every approximate point show its error radius or a confidence cue; (2) is the count of unlocatable records reported; (3) does the data carry provenance for each placement; (4) does the caption name the geocoding method and any smoothing. If a sharp pin appears anywhere you only have a parish-level guess, fix it before publishing — that single false-precise dot undermines trust in the whole map.
Key Takeaways
- The root cause of misleading location maps is storing exact coordinates with no error record.
- Replace crisp pins with buffer circles sized to the uncertainty radius.
- Store explicit columns: uncertainty radius, confidence, geocode method and source.
- Never silently drop unlocatable places — report their count to avoid survivorship bias.
- Encode confidence with radius, opacity or symbol shape; combine at most two cues.
- Switch to a kernel density surface when individual points are too uncertain to trust.
- Audit for any false-precise pin and state geocoding method and bandwidth in the caption.
Frequently Asked Questions
How do I show that a location is approximate, not exact?
Encode the uncertainty visually rather than dropping a crisp pin. Use a fuzzy buffer circle sized to the error radius, reduced opacity, a soft halo, or a distinct symbol — so a reader never mistakes a guess for a surveyed point.
Why do my approximate points look falsely precise?
Because a sharp pin at exact coordinates implies metre-level accuracy you do not have. The root cause is storing a single lat/long with no error field; add an uncertainty radius and render it, rather than a dimensionless dot.
What should I do with places I cannot locate at all?
Do not silently drop them — that biases the map toward well-documented places. Record them as ungeocoded with a reason, report the count, and consider an off-map list or a centroid flagged as low-confidence.
How do I store uncertainty in my data?
Add explicit columns: an uncertainty radius in metres, a confidence level, and a geocoding method or source. Storing provenance per point lets you filter, style by confidence, and defend every placement later.
Can a heatmap or density surface help with uncertain points?
Yes. When individual coordinates are too uncertain to trust, a kernel density surface honestly shows where activity concentrated without asserting precise points, as long as you state the smoothing bandwidth.