Компонент ChoroplethMap в экосистеме Nivo предназначен для визуализации географических распределений данных на основе областей (страны, регионы, штаты, административные единицы). В основе лежит сопоставление набора данных с геометрией GeoJSON, где каждая область окрашивается в соответствии с числовым значением.
Характерная особенность choropleth-карт заключается в том, что значение отображается не точкой или линией, а заливкой территории. Это делает компонент особенно подходящим для аналитики плотности, сравнительных показателей и агрегированных метрик.
ChoroplethMap работает на пересечении двух источников данных:
Базовая структура данных:
const data = [
{ id: 'FRA', value: 123 },
{ id: 'DEU', value: 98 },
{ id: 'USA', value: 210 }
]
GeoJSON содержит объекты:
{
"type": "Feature",
"properties": {
"id": "FRA",
"name": "France"
},
"geometry": {
"type": "Polygon",
"coordinates": [...]
}
}
Ключевым моментом является совпадение идентификатора id
в данных и properties.id в GeoJSON. Именно через это
соответствие происходит окрашивание.
Компонент импортируется из geo-набора:
import { Choropleth } from '@nivo/geo'
import worldCountries from './world_countries.json'
Простейшая конфигурация:
<Choropleth
data={data}
features={worldCountries.features}
margin={{ top: 0, right: 0, bottom: 0, left: 0 }}
colors="nivo"
domain={[0, 300]}
unknownColor="#666666"
label="properties.name"
/>
Основные параметры:
data — числовые значенияfeatures — GeoJSONdomain — диапазон значенийcolors — палитраunknownColor — цвет для отсутствующих данныхВнутренний процесс основан на join-операции:
Если значение отсутствует, используется
unknownColor.
Особое значение имеет стабильность ключей. Несовпадение форматов (например, ISO3 vs ISO2) приводит к разрыву визуализации.
ChoroplethMap поддерживает различные типы цветовых интерполяций:
domain={[0, 500]}
colors={['#e0f3db', '#43a2ca', '#0868ac']}
Значения интерполируются между точками шкалы.
colors="blues"
colors="greens"
colors="reds"
colors="nivo"
Палитры оптимизированы для восприятия градиентов в аналитике.
Часто используется нормализация данных до диапазона:
Это особенно важно при сильной асимметрии значений.
Параметр label управляет тем, какие данные отображаются
внутри области:
label="properties.name"
Можно использовать вложенные свойства GeoJSON. Однако при высокой плотности регионов подписи часто отключаются для сохранения читаемости.
Tooltip формируется динамически на основе feature:
tooltip={({ feature }) => {
return (
<div>
<strong>{feature.properties.name}</strong>
<div>{feature.value ?? 'no data'}</div>
</div>
)
}}
Возможные сценарии:
ChoroplethMap интегрируется с системой theme:
theme={{
tooltip: {
container: {
background: '#222',
color: '#fff',
fontSize: 12
}
},
labels: {
text: {
fontSize: 10,
fill: '#333'
}
}
}}
Ключевые зоны кастомизации:
Легенда критична для понимания распределения значений.
legends={[
{
anchor: 'bottom-left',
direction: 'column',
translateX: 20,
itemWidth: 80,
itemHeight: 14,
symbolShape: 'square'
}
]}
Типы легенд:
Для choropleth чаще используется непрерывная шкала.
Компонент поддерживает различные projection-модели:
Настройка:
projectionType="mercator"
projectionScale={100}
projectionTranslation={[0.5, 0.5]}
Выбор проекции влияет на:
ChoroplethMap может работать с крупными GeoJSON-файлами, однако производительность зависит от:
Практические оптимизации:
Архитектура Nivo позволяет добавлять слои поверх карты:
layers={[
'features',
'legends',
props => {
return (
<g>
<circle cx={100} cy={100} r={10} fill="red" />
</g>
)
}
]}
Слои могут использоваться для:
Частый сценарий — неполные датасеты.
Поведение контролируется через:
unknownColor="#ccc"
Дополнительно возможна фильтрация:
ChoroplethMap поддерживает события:
onCl ick={(feature) => {
console.log(feature.id)
}}
onMouseEn ter={(feature) => {
console.log(feature.properties.name)
}}
Типичные сценарии:
ChoroplethMap часто используется как центральный компонент dashboard-композиций:
Синхронизация осуществляется через shared state:
Наиболее частые проблемы:
Несовпадение идентификаторов:
Несоответствие GeoJSON:
Перегрузка геометрии:
Неправильный domain:
ChoroplethMap применяется не только для статической аналитики:
Такие сценарии требуют внешнего управления состоянием и подготовки данных вне компонента.