Nivo построена вокруг строгой модели входных данных, где каждый тип визуализации требует предсказуемой структуры JavaScript-объектов. Архитектура библиотеки ориентирована на декларативное описание графиков, поэтому данные не «рисуются», а интерпретируются через заранее определённые схемы. Это накладывает требования к форме массивов, ключам объектов и типам значений.
Во всех основных компонентах Nivo фундаментальной структурой является массив объектов. Каждый объект представляет собой отдельную сущность графика: точку, категорию, серию или узел.
Типичный формат:
const data = [
{ id: 'A', value: 12 },
{ id: 'B', value: 19 },
{ id: 'C', value: 7 }
]
Ключевые характеристики:
id — идентификатор элементаvalue — числовое значение, используемое для
вычисленийТакая структура характерна для простых графиков: pie, bar, radar.
Для линейных и комбинированных графиков используется модель серий. Каждый элемент массива представляет отдельную серию данных.
const data = [
{
id: 'series-1',
data: [
{ x: '2024-01', y: 10 },
{ x: '2024-02', y: 15 }
]
}
]
Особенности:
x: число, строка, датаy всегда числовойТакая структура активно используется в line charts и area charts.
Для временных данных используется расширенная модель, где
x интерпретируется как дата или временная метка.
const data = [
{
id: 'temperature',
data: [
{ x: new Date('2024-01-01'), y: 5 },
{ x: new Date('2024-01-02'), y: 7 }
]
}
]
Особенности обработки:
DateВажный аспект: данные не преобразуются автоматически в нужную временную шкалу, если не указано соответствующее поведение оси.
Для bar charts и аналогичных визуализаций часто используется категориальная модель.
const data = [
{ country: 'Kazakhstan', apples: 40, bananas: 30 },
{ country: 'Russia', apples: 55, bananas: 20 }
]
Здесь:
apples, bananas) становятся
сериямиindexByТакая модель требует явного указания ключей при конфигурации компонента.
Nivo поддерживает два подхода:
Используется в pie, radial, bullet charts.
const data = [
{ id: 'Chrome', value: 60 },
{ id: 'Firefox', value: 25 }
]
Используется в grouped bar charts.
const data = [
{ group: 'A', type: 'x', value: 10 },
{ group: 'A', type: 'y', value: 20 }
]
Tree, treemap и sunburst визуализации используют рекурсивную структуру.
const data = {
name: 'root',
children: [
{
name: 'branch-1',
children: [
{ name: 'leaf-1', value: 10 }
]
}
]
}
Характеристики:
children задаёт вложенностьvalueТакая модель требует строгой консистентности структуры.
Heatmap и calendar charts используют двумерную модель.
const data = [
{ x: 0, y: 0, value: 5 },
{ x: 0, y: 1, value: 10 },
{ x: 1, y: 0, value: 3 }
]
Особенности:
x и y формируют координатную сеткуvalue определяет интенсивностьДля геовизуализаций применяется GeoJSON-совместимая структура.
const data = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
properties: { name: 'Region A' },
geometry: {
type: 'Polygon',
coordinates: [...]
}
}
]
}
Используются:
FeatureCollectionFeatureВнутри моделей данных выделяются следующие типы:
value, y,
size)id, категории)Date, ISO)children, data)Особое значение имеет стабильность типов: одна и та же серия должна сохранять формат на протяжении всего жизненного цикла компонента.
Данные в Nivo не используются напрямую, а проходят через слой доступа (accessors):
xScale и yScaleindexBykeysvalueFormatПример:
<Bar
data={data}
indexBy="country"
keys={['apples', 'bananas']}
/>
Здесь ключи не выводятся автоматически — они задаются явно, что делает модель детерминированной.
Перед визуализацией данные часто проходят нормализацию:
xidПример агрегации:
const grouped = data.reduce((acc, item) => {
acc[item.category] = (acc[item.category] || 0) + item.value
return acc
}, {})
В экосистеме React и Nivo часто используются строгие типы:
type Point = {
x: number | string | Date
y: number
}
Типизация обеспечивает:
Несмотря на разнообразие графиков, можно выделить общие шаблоны:
Каждый паттерн соответствует определённому типу визуализации и не является взаимозаменяемым без трансформации структуры.