Choropleth Design Lab

Choropleth Design Lab

Compare three ways to classify a numeric property of geographic areas. Equal intervals divide the value span, quantiles use sorted observations, and Jenks minimizes within-class squared variation. Each method shows the actual polygons, legend, counts and gaps in the data. A zero remains a measured value; missing and nonnumeric properties use a separate hatch. Enter what the numbers mean and their unit before generating a map.

1. Geographic areas

WGS84 longitude/latitude Polygon or MultiPolygon only. Max 100 features, 4000 total coordinates and 500 kB input. No external map tiles.

2. Value meaning and class request

Name the quantity and unit. Raw totals are not population- or area-normalized; prepare a rate in the source data if you intend to compare rates.

Each interval includes its upper boundary. Duplicate values stay together; constant data forms one class. Equal intervals may include an empty class.

Open local area GeoJSON or load the example.

Comments & questions

Choropleth Design Lab

Compare three ways to classify a numeric property of geographic areas. Equal intervals divide the value span, quantiles use sorted observations, and Jenks minimizes within-class squared variation. Each method shows the actual polygons, legend, counts and gaps in the data. A zero remains a measured value; missing and nonnumeric properties use a separate hatch. Enter what the numbers mean and their unit before generating a map.

Key features

  • Local Polygon and MultiPolygon GeoJSON validation, including holes and WGS84 coordinates
  • Equal interval, duplicate-aware quantile and exact dynamic-programming Jenks breaks for up to 100 areas
  • Three area SVG maps with one shared sequential palette and a patterned unmapped class
  • Per-class ranges, counts, shares and within-class squared variation for method comparison
  • Separate valid zero, absent/null and nonnumeric observations
  • Download each method's standalone SVG and classified GeoJSON plus a three-method comparison CSV

How to use

  1. Open or paste a local WGS84 Polygon/MultiPolygon FeatureCollection, or load the self-created example.
  2. Select a property with numeric values, then name the measured value and its unit. Counts are not automatically divided by area or population.
  3. Choose two to seven requested classes and compare all three methods. Repeated observations remain together and may reduce the effective class count.
  4. Inspect the actual area maps, legends, missing hatch, class counts and within-class variation.
  5. Save any method's SVG and classified GeoJSON, or save the combined CSV for later review.

Use cases

  • Compare raw service counts across local districts while noting that district size can differ
  • See whether an extreme value makes equal intervals uninformative
  • Check quantile and Jenks class boundaries before publishing a thematic map
  • Report missing attributes distinctly from legitimate zero values

Frequently asked questions

Does a zero mean missing?

No. Finite numeric 0 is classified. Absent and null properties are missing; strings, booleans and objects are nonnumeric and shown separately.

How is a value exactly on a class boundary assigned?

The first class includes its lower and upper values. Later classes exclude their lower boundary and include their upper boundary, so an exact shared boundary stays in the lower class.

Why might fewer classes appear than I requested?

A constant property has one class. Quantiles and Jenks keep identical values together, so duplicate observations can collapse boundaries and produce fewer effective classes.

Do these maps compare rates or densities automatically?

No. They classify the numeric property as supplied. Counts per area can be misleading when populations or area sizes differ; compute a suitable rate or density before importing when that is the intended measure.

Are the areas drawn on an external basemap?

No. The browser draws the supplied WGS84 polygons with a local equirectangular fit, without external map tiles. Shape and area distortion, especially at high latitude, remains. The map does not validate source geography or data quality.

Are my GeoJSON files uploaded?

No. Parsing, classification and downloads run in this browser tab. File contents are not sent to a server API.

Privacy

GeoJSON and numeric properties remain in this browser tab. The tool performs no uploads or external map-tile requests.

References

Related Tools

GeoJSON Map EditorColor Palette GeneratorSpatial Table JoinWasm Module InspectorHreflang Matrix CheckerAST Query PlaygroundContainer Build GraphDependency Graph ExplorerSemver Range LabCron Schedule AuditorPatch Review WorkbenchSource Map ExplorerLocalization Catalog AuditorStructured Data ReviewerHTTP Archive AnalyzerWebhook Signature LabProtobuf Schema WorkbenchGraphQL Schema LabAvro Schema EvolutionLocal SQL WorkbenchSchema Form BuilderMesh Repair WorkbenchPipe Network LabRobot Arm Kinematics LabThermal Network LabBeam Response LabGear Train DesignerTolerance Stackup LabSensor Calibration FitPCB Stackup PlannerDigital Filter DesignerNetwork Reachability MapSun Shadow MapGPS Error SimulatorDigital Logic SimulatorAnalog Circuit LabMechanism Linkage LabAnalysis Mesh GeneratorOpenAPI Contract InspectorDatabase Migration PlannerDimensional Equation CheckerTruss Force LabBoolean Minimization LabControl Response LabQueueing Simulation LabGeofence Event SimulatorCoordinate Reference LabSurvey Traverse LabRaster Classification LabMap Print ComposerRaster Reprojection LabElevation Contour MakerTerrain Viewshed LabWatershed DelineatorMap Tile PackagerText File Encoding WorkbenchFilesystem Portability AuditorSBOM License ExplorerFile Signature Auditornpm Lockfile Conflict ResolverSource Secret AuditorOffline Web Package BuilderCertificate Chain InspectorTorrent Metainfo InspectorChunked File PackagerEncrypted File VaultDuplicate File FinderArchive WorkbenchDesign Token ManagerSpacing Token DesignerResponsive Type SystemPackaging Dieline DesignerSVG Icon Sprite PackerFlex Layout PlaygroundCSS Grid PlaygroundRegex Equivalence LabMarkdown Repository AuditorLog Template MinerResponsive Layout AuditorEmail Template PreviewInternal Link GraphState Machine TesterPetri Net SimulatorGit History VisualizerCurl Request WorkbenchBinary Protocol DesignerHex File EditorBinary Patch WorkbenchFile Signature WorkbenchAPI Mock SandboxSchema Column MapperEvent Log SessionizerER Diagram DesignerTime Series Gap AuditorStratified Data SplitterData Lineage DesignerDecision Tree LabData Anonymization WorkbenchData Expectation RunnerJSON Schema ValidatorBasket Pattern AnalyzerRobots Policy TesterSEO HTML AuditorAccessibility Structure AuditorSyndication Feed WorkbenchIndexNow Payload BuilderCrawl Log AnalyzerCSP Policy WorkbenchSearch Performance AnalyzerCSV Formula Risk AuditorCORS Response SimulatorCache Header LabCookie Policy InspectorWeb Vitals Trace LabSitemap Health AuditorBatch File RenamerFile Manifest VerifierFolder Space MapFolder Difference ReviewerRoute Order OptimizerPolygon Overlay LabCartographic Label PlacerGeoJSON Topology AuditorGPX Track AnalyzerTrack Privacy RedactorCSV Table JoinCSV Pivot WorkbenchScientific Data ProfilerTabular Cleaning WorkbenchRecord ReconciliationData Dictionary BuilderCanonical Graph AuditorRedirect Plan TesterHTTP response and ping reference testBrowser and System InformationJSON ↔ YAML ConverterXML ↔ JSON ConverterHTML FormatterJavaScript MinifierMock Data Generator.gitignore GeneratorLicense GeneratorUser-Agent ParserPassword Strength CheckerCode to ImageXML FormatterHTTP Status Code LookupMIME Type LookupJS & SQL String EscapeCSS Box Shadow GeneratorCSS Gradient GeneratorIndent ConverterNumber Base ConverterUnicode Escape ConverterUnicode InspectorJSON Structure DiffMarkdown Table GeneratorBase64 EncoderJSON FormatterURL EncoderSQL FormatterCron Expression GeneratorRegex TesterUUID GeneratorHash GeneratorTimestamp ConverterJWT DecoderHTML Entity ConverterMarkdown PreviewCSS MinifierMeta Tag GeneratorJSON ↔ CSVCase ConverterImage to Base64
Explore all Dev Tools tools →Image/Media →Text/Convert →Life/Fun →