В библиотеке Nivo направление отображения данных определяется через параметр компоновки, который влияет на ось категорий и распределение значений. Визуально это проявляется в том, как строятся столбцы, линии или области: по вертикали (стандартное представление) или по горизонтали (разворот координатной системы).
Основная идея заключается в том, что vertical ориентирует категории по оси X, а значения по оси Y, тогда как horizontal меняет их местами, превращая категории в вертикальную ось, а значения — в горизонтальную шкалу.
В Nivo направление задаётся через свойство layout (в
большинстве категорий графиков) или через специфические параметры
компонента.
Два основных режима:
Разница заключается не только в визуальной ориентации, но и в восприятии данных:
Во многих компонентах Nivo вертикальная ориентация используется по умолчанию. В этом режиме:
Пример конфигурации для столбчатой диаграммы:
import { ResponsiveBar } from '@nivo/bar'
const data = [
{ country: 'A', value: 40 },
{ country: 'B', value: 80 },
{ country: 'C', value: 60 }
]
const MyBar = () => (
<ResponsiveBar
data={data}
keys={['value']}
indexBy="country"
layout="vertical"
margin={{ top: 50, right: 50, bottom: 50, left: 60 }}
/>
)
В этом режиме каждая категория располагается вдоль горизонтальной оси, а высота столбца отражает величину значения.
При установке layout="horizontal" происходит инверсия
осей:
Пример конфигурации:
import { ResponsiveBar } from '@nivo/bar'
const data = [
{ country: 'A', value: 40 },
{ country: 'B', value: 80 },
{ country: 'C', value: 60 }
]
const MyHorizontalBar = () => (
<ResponsiveBar
data={data}
keys={['value']}
indexBy="country"
layout="horizontal"
margin={{ top: 50, right: 50, bottom: 50, left: 80 }}
/>
)
Горизонтальное расположение часто требует увеличенного левого отступа из-за длинных подписей категорий.
Различия между режимами проявляются в нескольких аспектах:
1. Читаемость категорий
2. Количество категорий
3. Визуальное восприятие величин
В @nivo/bar параметр layout является
ключевым механизмом управления направлением.
Дополнительно на ориентацию влияют:
indexBy — определяет категориальную осьkeys — определяет значенияaxisBottom, axisLeft — привязка осейenableLabel — размещение подписейСмена layout автоматически перестраивает:
В линейных графиках Nivo (@nivo/line) концепция
horizontal/vertical не задаётся напрямую через layout, но
логика ориентации сохраняется через оси:
Пример:
import { ResponsiveLine } from '@nivo/line'
const data = [
{
id: 'series 1',
data: [
{ x: 1, y: 10 },
{ x: 2, y: 20 },
{ x: 3, y: 15 }
]
}
]
const MyLine = () => (
<ResponsiveLine
data={data}
margin={{ top: 50, right: 50, bottom: 50, left: 60 }}
xScale={{ type: 'point' }}
yScale={{ type: 'linear' }}
/>
)
Здесь визуальная ориентация определяется системой координат, а не
явным параметром layout.
В heatmap и сеточных графиках направление определяется структурой данных:
Хотя явного horizontal/vertical нет, визуальная логика
аналогична:
indexBy и keys фактически
разворачивает матрицуПри смене направления автоматически изменяются:
axisBottom и axisLeftОсобенно важно учитывать:
Внутренне Nivo реализует ориентацию как трансформацию координат:
Это влияет на:
Компоненты ResponsiveBar, ResponsiveLine и
другие используют размеры контейнера для пересчёта:
Это влияет на:
Визуальные паттерны:
Разница становится особенно заметной при увеличении количества категорий, где горизонтальная ориентация сохраняет читаемость текста за счёт вертикального пространства.
Tooltip в Nivo адаптируется автоматически:
Это позволяет сохранять логическую связь между курсором и значением независимо от ориентации графика.