---
title: "Planning a thematic map in MangoMap"
description: "Choose how to style a point, line, or polygon layer before you open the Style tab: what your fields allow, what the map must show, and three worked examples."
sidebar:
  label: "Planning a thematic map"
---

Ask two questions before you open the Style tab:

1. **What does my data allow?** Colour by category needs a text field or a numeric field of codes. Colour by quantity needs a numeric field. A heatmap and size by a number need a point layer.
2. **What should viewers learn from the map?** Are you showing *kinds*, *amounts*, or *density*?

Your data sets the first answer. The map's purpose sets the second. Together, they lead to one way to style the layer:

<!-- diagram:thematic-map-planning-flow -->
<svg class="dark:hidden" style="width: 100%; height: auto" viewBox="0 0 640 656" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="thematic-map-planning-flow-inline-title thematic-map-planning-flow-inline-desc">
  <title id="thematic-map-planning-flow-inline-title">Which thematic style fits</title>
  <desc id="thematic-map-planning-flow-inline-desc">Flowchart: for one look, use Single colour or Uniform colour; to show kinds, colour by category from a text field or numeric codes; to show density, use a heatmap, on point layers only; to show amounts, colour by quantity from a numeric field, which is the only way on lines and polygons, while point layers can also, or instead, size markers by the number.</desc>
  <defs>
    <marker id="thematic-map-planning-flow-inline-arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#525252"/></marker>
    <marker id="thematic-map-planning-flow-inline-arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#c4360c"/></marker>
  </defs>
  <rect width="100%" height="100%" fill="#f5f5f5"/>
  <path d="M320 60 L320 82" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-arrow)"/>
  <path d="M424 136 L516 136 Q524 136 524 144 L524 202" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-arrow)"/>
  <path d="M320 188 L320 262" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-arrow)"/>
  <path d="M216 316 L124 316 Q116 316 116 324 L116 386" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-arrow)"/>
  <path d="M424 316 L516 316 Q524 316 524 324 L524 386" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-arrow)"/>
  <path d="M320 368 L320 442" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-arrow)"/>
  <path d="M216 496 L124 496 Q116 496 116 504 L116 566" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-arrow)"/>
  <path d="M424 496 L516 496 Q524 496 524 504 L524 566" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-arrow)"/>
  <rect x="453" y="112" width="34" height="16" rx="2" fill="#f5f5f5"/><text x="470" y="124" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="328" y="213" width="26" height="16" rx="2" fill="#f5f5f5"/><text x="341" y="225" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="146" y="292" width="48" height="16" rx="2" fill="#f5f5f5"/><text x="170" y="304" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">KINDS</text>
  <rect x="439" y="292" width="62" height="16" rx="2" fill="#f5f5f5"/><text x="470" y="304" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">DENSITY</text>
  <rect x="328" y="386" width="66" height="16" rx="2" fill="#f5f5f5"/><text x="361" y="398" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">AMOUNTS</text>
  <rect x="157" y="472" width="26" height="16" rx="2" fill="#f5f5f5"/><text x="170" y="484" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="453" y="472" width="34" height="16" rx="2" fill="#f5f5f5"/><text x="470" y="484" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="200" y="16" width="240" height="44" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/>
  <text x="320" y="43" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">You have a layer to style</text>
  <polygon points="320,84 424,136 320,188 216,136" fill="#ffffff" stroke="#171717" stroke-width="1"/><text x="320" y="131" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">One look for</text><text x="320" y="149" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">every feature?</text>
  <polygon points="320,264 424,316 320,368 216,316" fill="rgba(196,54,12,0.08)" stroke="#c4360c" stroke-width="1.4"/><text x="320" y="311" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">What should</text><text x="320" y="329" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">the map show?</text>
  <polygon points="320,444 424,496 320,548 216,496" fill="#ffffff" stroke="#171717" stroke-width="1"/><text x="320" y="491" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">A point</text><text x="320" y="509" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">layer?</text>
  <rect x="424" y="204" width="200" height="72" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/><text x="524" y="226" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">One colour for all</text><text x="524" y="246" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">no field: Single colour</text><text x="524" y="262" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">or Uniform colour</text>
  <rect x="16" y="388" width="200" height="72" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/><text x="116" y="410" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Colour by category</text><text x="116" y="430" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">a text field, or a numeric</text><text x="116" y="446" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">field of codes</text>
  <rect x="424" y="388" width="200" height="72" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/><text x="524" y="410" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Heatmap</text><text x="524" y="430" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">points only</text><text x="524" y="446" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">no field, or a numeric weight</text>
  <rect x="16" y="568" width="200" height="72" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/><text x="116" y="590" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Colour by quantity</text><text x="116" y="610" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">a numeric field; the only way</text><text x="116" y="626" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">on lines and polygons</text>
  <rect x="424" y="568" width="200" height="72" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/><text x="524" y="590" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Colour, size, or both</text><text x="524" y="610" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">colour by quantity, or size</text><text x="524" y="626" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">markers by the number</text>
</svg>
<svg class="hidden dark:block" style="width: 100%; height: auto" viewBox="0 0 640 656" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="thematic-map-planning-flow-inline-dark-title thematic-map-planning-flow-inline-dark-desc">
  <title id="thematic-map-planning-flow-inline-dark-title">Which thematic style fits</title>
  <desc id="thematic-map-planning-flow-inline-dark-desc">Flowchart: for one look, use Single colour or Uniform colour; to show kinds, colour by category from a text field or numeric codes; to show density, use a heatmap, on point layers only; to show amounts, colour by quantity from a numeric field, which is the only way on lines and polygons, while point layers can also, or instead, size markers by the number.</desc>
  <defs>
    <marker id="thematic-map-planning-flow-inline-dark-arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#a3a3a3"/></marker>
    <marker id="thematic-map-planning-flow-inline-dark-arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#ff7a4d"/></marker>
  </defs>
  <rect width="100%" height="100%" fill="#141414"/>
  <path d="M320 60 L320 82" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-dark-arrow)"/>
  <path d="M424 136 L516 136 Q524 136 524 144 L524 202" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-dark-arrow)"/>
  <path d="M320 188 L320 262" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-dark-arrow)"/>
  <path d="M216 316 L124 316 Q116 316 116 324 L116 386" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-dark-arrow)"/>
  <path d="M424 316 L516 316 Q524 316 524 324 L524 386" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-dark-arrow)"/>
  <path d="M320 368 L320 442" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-dark-arrow)"/>
  <path d="M216 496 L124 496 Q116 496 116 504 L116 566" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-dark-arrow)"/>
  <path d="M424 496 L516 496 Q524 496 524 504 L524 566" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#thematic-map-planning-flow-inline-dark-arrow)"/>
  <rect x="453" y="112" width="34" height="16" rx="2" fill="#141414"/><text x="470" y="124" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="328" y="213" width="26" height="16" rx="2" fill="#141414"/><text x="341" y="225" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="146" y="292" width="48" height="16" rx="2" fill="#141414"/><text x="170" y="304" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">KINDS</text>
  <rect x="439" y="292" width="62" height="16" rx="2" fill="#141414"/><text x="470" y="304" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">DENSITY</text>
  <rect x="328" y="386" width="66" height="16" rx="2" fill="#141414"/><text x="361" y="398" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">AMOUNTS</text>
  <rect x="157" y="472" width="26" height="16" rx="2" fill="#141414"/><text x="170" y="484" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="453" y="472" width="34" height="16" rx="2" fill="#141414"/><text x="470" y="484" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="200" y="16" width="240" height="44" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/>
  <text x="320" y="43" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">You have a layer to style</text>
  <polygon points="320,84 424,136 320,188 216,136" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><text x="320" y="131" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">One look for</text><text x="320" y="149" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">every feature?</text>
  <polygon points="320,264 424,316 320,368 216,316" fill="rgba(255,122,77,0.10)" stroke="#ff7a4d" stroke-width="1.4"/><text x="320" y="311" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">What should</text><text x="320" y="329" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">the map show?</text>
  <polygon points="320,444 424,496 320,548 216,496" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><text x="320" y="491" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">A point</text><text x="320" y="509" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">layer?</text>
  <rect x="424" y="204" width="200" height="72" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/><text x="524" y="226" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">One colour for all</text><text x="524" y="246" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">no field: Single colour</text><text x="524" y="262" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">or Uniform colour</text>
  <rect x="16" y="388" width="200" height="72" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/><text x="116" y="410" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Colour by category</text><text x="116" y="430" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">a text field, or a numeric</text><text x="116" y="446" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">field of codes</text>
  <rect x="424" y="388" width="200" height="72" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/><text x="524" y="410" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Heatmap</text><text x="524" y="430" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">points only</text><text x="524" y="446" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">no field, or a numeric weight</text>
  <rect x="16" y="568" width="200" height="72" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/><text x="116" y="590" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Colour by quantity</text><text x="116" y="610" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">a numeric field; the only way</text><text x="116" y="626" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">on lines and polygons</text>
  <rect x="424" y="568" width="200" height="72" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/><text x="524" y="590" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Colour, size, or both</text><text x="524" y="610" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">colour by quantity, or size</text><text x="524" y="626" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">markers by the number</text>
</svg>
<!-- /diagram:thematic-map-planning-flow -->

## First decision: what your data allows

Two things decide what you can do:

- **The colour driver**, on every geometry. The dropdown is `Colour markers by` on points, `Colour lines by` on lines, and `Fill polygons by` on polygons. It takes the no-field choice (`Single colour` on points, `Uniform colour` on lines and polygons) or any field on your dataset.
- **The geometry.** Some methods exist on one geometry only. Points have a `Marker type` picker (`Circle`, `Icon`, `Custom Icon`, `Heatmap`) and a size driver. Lines have patterns and casing. Polygons have fill patterns.

| Goal | Field type | Geometry | How to style |
| --- | --- | --- | --- |
| One look across the layer | Any | Point, line, polygon | `Single colour` (points) or `Uniform colour` (lines, polygons) |
| One colour per category | Text, or numeric codes | Point, line, polygon | Pick the field in the colour driver. For a numeric field, set `Style as` to `Categories`. |
| Graduated colour by amount | Numeric | Point, line, polygon | Pick the numeric field, then choose a class count in `Style as` and a classification method |
| Categories told apart by symbol, not only colour | Text, or numeric codes | Point, line, polygon | Customise each category: marker type or icon (points), line pattern (lines), fill pattern (polygons) |
| Size by amount | Numeric | Point only | `Size markers by` → a numeric field |
| Point density | None, or a numeric weight | Point only | `Marker type` → `Heatmap` |

If your only field is text, colour by category is your thematic choice. If you have a numeric field, you can colour by quantity on any geometry, or by category when the numbers are codes. On a point layer you can also size by the number, or show density with a heatmap. Line width and polygon size cannot come from a field, so on lines and polygons an amount is shown with colour.

## Second decision: what should the map show?

Each method answers a different question for the viewer:

- **Colour by category** shows kinds. Road class, zoning, income group, airport type, or numeric codes such as zone numbers. Viewers see what type each feature is.
- **Colour by quantity** shows relative amounts. Population, building height, road length, a score. Viewers compare the values.
- **Size by a number** (points) also shows amounts. Viewers compare the marker sizes.
- **Heatmap** (points) shows where features are dense. Viewers see where points cluster, not the value of each point.

A common error is splitting numeric codes (a zone number, a category code) into classes. Set `Style as` to `Categories` for those. The opposite error is colour by category on a field with hundreds of unique values. Both give maps that look styled but tell the viewer nothing.

## Worked example 1 — Category: roads by road class (lines)

You have a line layer of Singapore roads with a `class` text field. Its values include `trunk`, `primary`, `secondary`, `residential`, `service`, and `footway`. The map's job: a viewer can quickly tell main roads from side streets and footpaths.

Open the layer's `Style` tab. In `Colour lines by`, pick `class`. Each class gets its own colour from the `Colour scheme` palette. Those colours carry no meaning, so viewers must check the legend for every road.

Open `Customise categories` and give the colours a meaning. Use strong, warm colours for motorways and trunk roads, and calmer colours for minor streets. Colour alone is not the only tool here: give footways and steps a `Dotted` pattern and cycleways and paths a `Dashed` one, so viewers can tell paths from roads at a glance. Rename each label (`footway` to `Footway`), and drag the rows into road order, main roads first, so the legend reads from the top down.

Category colouring gets its meaning from your choices, not from MangoMap's defaults. The same steps work for building classes on a polygon layer (with fill patterns) or airport types on a point layer (with marker types).

The result, after you customise the categories:

<img src="/_assets/styling-layers/concepts-planning-a-thematic-map--roads-by-class.png" alt="Singapore Style Lab as a viewer sees it, with only Roads — Category shown: motorways and trunk roads in reds and oranges, main roads in amber, blue, and green, local streets in purple and grey, footways dotted and cycleways dashed; the legend lists the road types in road order, Motorway, Motorway link, and Trunk road down to Footway, Steps, Path, and Track" width="1600" height="960" />

## Worked example 2 — Quantity: countries by GDP per person (polygons)

You have a polygon layer of world countries with a `gdp_pc` numeric field. Values run from about 260 to 200,000 US dollars per person. Half the countries are below about 5,800. The map's job: a viewer can see which parts of the world are richer and which are poorer.

Open the layer's `Style` tab. In `Fill polygons by`, pick `gdp_pc`. The panel shows a `Style as` select (default `5 classes`), a classification method dropdown (default `Natural Breaks (Jenks)`), and a `Colour scheme` palette. Natural Breaks puts the class breaks at gaps in the data, so each colour holds a group of similar countries.

A common error is picking `Equal Interval`. With 5 classes, each class is about 40,000 wide. That puts 150 of the 177 countries in the lightest colour, and hides the differences between them.

When the class breaks look right, open `Customise Class Breaks` to round awkward boundaries (`8,427` → `8,000`) so the legend reads cleanly. See [Choosing a classification method for choropleth maps](/docs/styling-layers/concepts-choosing-classification-method) for when each method fits. The same steps work for roads coloured by length or for points coloured by a number.

The result, with the five class breaks in the legend:

<img src="/_assets/styling-layers/concepts-planning-a-thematic-map--gdp-by-class.png" alt="World Atlas as a viewer sees it, with Countries — Economy shown: countries in five shades of green from pale to dark, with much of Europe, Saudi Arabia, and Australia darker and much of Africa and South Asia paler; the legend lists the classes >=261, >1447, >3894, >7961, and >60170" width="1600" height="960" />

## Worked example 3 — Heatmap: city density (points)

You have a point layer of world cities. In some regions the cities sit close together. In others there are only a few. Drawn as individual circles, the markers in dense regions overlap and hide each other. The map's job: a viewer can see where cities cluster without counting individual points.

Open the layer's `Style` tab. In `Marker type`, pick `Heatmap`. The controls change to heatmap options: `Colour gradient`, `Weight by`, `Radius`, `Intensity`, and `Opacity`.

Leave `Weight by` on `Equal weight` to count every city the same. Pick a numeric field such as population to let large cities count for more. Pick a gradient that goes from cool to hot. Set `Radius` and `Intensity` so the heatmap reads as a smooth gradient at the zoom level your viewers use.

Use a heatmap when density is the main message. To see individual points as well, keep the marker type on `Circle` and use the colour and size controls instead. A layer cannot be a heatmap and circles at the same time.

The result, with the gradient from low to high density in the legend:

<img src="/_assets/styling-layers/concepts-planning-a-thematic-map--city-heatmap.png" alt="World Point Styling Lab as a viewer sees it, with Major Cities — Heatmap shown: a blue-to-red heatmap over Europe, Africa, and Asia, hottest over India, eastern China, and Western Europe; the legend shows the gradient from Low to High" width="1600" height="960" />

## A note on bubble maps

Sizing points by a numeric field makes a "bubble" or proportional-symbol map. On a point layer, switch `Size markers by` from `Uniform size` to a numeric field. Use it when size should show an amount instead of colour. It works together with the colour driver, so colour and size can show two different fields at once. See [How to size points by a number](/docs/styling-layers/size-points-by-a-number).

Colour from one field and size from another, GDP per person in five classes and population as the bubble size:

<img src="/_assets/styling-layers/concepts-planning-a-thematic-map--gdp-and-population.png" alt="World Point Styling Lab as a viewer sees it with Centroids — GDP and Population on: country points in five greens by GDP per person and sized by population, and the legend entry showing the five class rows with a size key of three circles under them" width="1600" height="960" />

See [How to colour and size points by two fields](/docs/styling-layers/colour-and-size-points-by-two-fields).

## What this isn't

This page is for the decision before you open the Style tab. The how-to guides walk through the controls.

For every geometry:

- [How to style features by category](/docs/styling-layers/style-by-category)
- [How to style features by quantity](/docs/styling-layers/style-by-quantity)
- [How to customise category and class break symbology](/docs/styling-layers/customise-category-and-class-break-symbology)

For one geometry:

- [How to size points by a number](/docs/styling-layers/size-points-by-a-number) (points)
- [How to make a heatmap from a point layer](/docs/styling-layers/make-a-heatmap) (points)
- [How to style line patterns and casing](/docs/styling-layers/style-line-patterns) (lines)
- [How to style polygon fill patterns](/docs/styling-layers/style-polygon-fill-patterns) (polygons)

The reference pages list the controls for each geometry:

- [Point layer style controls](/docs/styling-layers/point-style-reference)
- [Line layer style controls](/docs/styling-layers/line-style-reference)
- [Polygon layer style controls](/docs/styling-layers/polygon-style-reference)

## Related

- [How layer styling works in MangoMap](/docs/styling-layers/concepts-layer-styling): the overview this page pairs with.
- [Choosing a classification method for choropleth maps](/docs/styling-layers/concepts-choosing-classification-method): the next choice once you've picked a numeric field.
- [How to customise category and class break symbology](/docs/styling-layers/customise-category-and-class-break-symbology): to fine-tune a style once it is set.
