Skip to content
Historical Data Visualisation

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 point

A 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:

ColumnHoldsExample
lat, lonBest-estimate coordinate52.63, 1.30
uncertainty_mError radius in metres2500
confidenceCategorical confidencelow / medium / high
geocode_methodHow it was located"parish centroid"
sourceWhere 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:

  1. Keep ungeocoded records with a geocode_status = "unlocated" flag and a reason.
  2. Report the count and proportion in the caption: "412 of 2,300 entries (18%) could not be located."
  3. 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.