> For the complete documentation index, see [llms.txt](https://developers.felt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.felt.com/felt-style-language/types-of-visualizations/h3.md).

# H3

H3 visualization is a way to aggregate point data into a grid of H3 cells.

H3 visualizations are defined using `"type": "h3"` . They generally share the same properties and behaviors as [color range visualizations for polygons](/felt-style-language/types-of-visualizations/numeric-visualizations-color-and-size.md). Properties of specific relevance to H3 are:

| Field name         | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `aggregation`      | The aggregation method that will be used on points within each cell. Supported values are `count` (default), `sum`, `min`, `max`, and `mean` .                                                                                                                                                                                                                                                                                                                        |
| `binMode`          | `fixed` (default), `low`, `medium`, `high`, or `auto`. `fixed` keeps the cell resolution constant at all zooms; the other modes pick a resolution from the current zoom, where `low` produces larger hexagons and `high` smaller ones (`auto` behaves like `medium`).                                                                                                                                                                                                 |
| `baseBinLevel`     | Required. If `binMode` is `fixed`, this is the [H3 cell resolution](https://h3geo.org/docs/core-library/restable/) that the map will use. H3 cells vary from resolution 0 (largest) to resolution 15 (smallest). In the zoom-adaptive modes, this is the reference resolution used for calculating class breaks — you will get best results choosing a resolution that matches the `fixed` resolution you would choose for the most commonly-viewed zoom of your map. |
| `numericAttribute` | The numeric column to aggregate. Required unless `aggregation` is `count` , in which case the column choice is irrelevant.                                                                                                                                                                                                                                                                                                                                            |

This is an example of an H3 visualization

<figure><img src="https://293097899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLlIfNdbm4rCsu755xrdc%2Fuploads%2F9B5BIEE2fH9WmWR4gWJ6%2FScreenshot%202025-08-01%20at%201.16.59%E2%80%AFPM.png?alt=media&amp;token=08d87b2f-4956-4cec-9930-3d3f42bbed98" alt=""><figcaption></figcaption></figure>

defined with the following style

```json
{
  "config": {
    "steps": {"type": "quantiles", "count": 5},
    "aggregation": "sum",
    "binMode": "fixed",
    "baseBinLevel": 3,
    "numericAttribute": "capacity_mw"
  },
  "paint": {"color": "@riverine"},
  "type": "h3",
  "version": "2.3.1",
  "label": {},
  "legend": {"displayName": "auto"}
}
```

`aggregation: "count"` doesn't need a `numericAttribute` — it counts the points in each cell:

```json
{
  "version": "2.3.1",
  "type": "h3",
  "config": {
    "aggregation": "count",
    "baseBinLevel": 4,
    "binMode": "medium",
    "steps": {"type": "continuous"}
  },
  "paint": {"color": "@galaxy", "opacity": 0.85, "strokeColor": "auto", "strokeWidth": 1},
  "legend": {"displayName": "auto"}
}
```

### Aggregation popups

H3 cells display **aggregated** values, not raw feature attributes. Their popups reference special attribute names — `"felt:cluster_size"` for the feature count, and `"felt:sum:column"`, `"felt:mean:column"`, `"felt:min:column"`, `"felt:max:column"` for aggregates. If no `popup` is provided, Felt auto-generates sensible stats from the aggregation type. See [the popup block](/felt-style-language/style-definition-blocks/the-popup-block.md#h3-aggregation-attributes).

```json
{
  "version": "2.3.1",
  "type": "h3",
  "config": {
    "numericAttribute": "revenue",
    "aggregation": "sum",
    "baseBinLevel": 5,
    "binMode": "medium",
    "steps": {"type": "jenks", "count": 5}
  },
  "paint": {"color": "@copper", "opacity": 0.85, "strokeColor": "auto", "strokeWidth": 1, "isClickable": true},
  "popup": {
    "titleAttribute": "felt:sum:revenue",
    "keyAttributes": ["felt:cluster_size", "felt:mean:revenue", "felt:min:revenue", "felt:max:revenue"]
  },
  "attributes": {"revenue": {"displayName": "Revenue ($)", "format": {"thousandSeparated": true, "mantissa": 0}}},
  "legend": {"displayName": "auto"}
}
```

{% hint style="info" %}
H3 cells are rendered as polygons, so `size` has no effect on them — control cell size with `baseBinLevel` (H3 resolution) and `binMode` (how that resolution adapts to zoom). The `attributes` block renames the **source column**, so `"revenue"` makes a popup entry read "Sum of Revenue ($)".
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developers.felt.com/felt-style-language/types-of-visualizations/h3.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
