В библиотеке визуализации данных Nivo оси являются базовым механизмом
привязки числовых и категориальных данных к визуальному пространству.
Компоненты axisTop, axisBottom,
axisLeft, axisRight используются для точной
настройки отображения шкал, подписей, сетки и вспомогательной информации
на графиках.
Каждая ось в Nivo представляет собой конфигурационный объект, который
передаётся в компонент графика (например, ResponsiveBar,
ResponsiveLine, ResponsiveScatterPlot).
Несмотря на внешнюю простоту, система осей обладает высокой гибкостью и
позволяет управлять как визуальной частью, так и форматированием
значений.
В Nivo используется четырёхсторонняя модель:
axisBottom — нижняя горизонтальная осьaxisTop — верхняя горизонтальная осьaxisLeft — левая вертикальная осьaxisRight — правая вертикальная осьКаждая ось может быть включена или отключена независимо. Это позволяет строить как классические графики с одной осью X и Y, так и более сложные визуализации с дублирующими шкалами.
Типовая конфигурация оси выглядит следующим образом:
axisBottom: {
tickSize: 5,
tickPadding: 5,
tickRotation: 0,
legend: 'X Axis',
legendPosition: 'middle',
legendOffset: 32
}
Ключевые параметры:
tickSize — длина засечек на оси tickPadding — отступ между засечкой и подписью tickRotation — угол поворота текста legend — подпись всей оси legendPosition — позиционирование подписи legendOffset — смещение легенды от оси
Эти параметры применимы ко всем четырём типам осей.
Нижняя ось чаще всего используется для отображения категорий, временных меток или дискретных значений.
axisBottom: {
tickSize: 5,
tickPadding: 10,
tickRotation: 45,
legend: 'Дата',
legendPosition: 'middle',
legendOffset: 40
}
Для кастомизации текста используется format:
axisBottom: {
format: value => value.slice(0, 3)
}
Это особенно полезно при работе с длинными строками или датами.
Левая ось является основной шкалой для числовых значений.
axisLeft: {
tickSize: 5,
tickPadding: 10,
tickRotation: 0,
legend: 'Значение',
legendPosition: 'middle',
legendOffset: -50
}
axisLeft: {
format: value => `${value}%`
}
Или с округлением:
axisLeft: {
format: value => Math.round(value)
}
Верхняя ось используется реже, но играет важную роль в аналитических и сравнительных графиках.
axisTop: {
tickSize: 5,
tickPadding: 10,
tickRotation: 0,
legend: 'Верхняя шкала',
legendPosition: 'middle',
legendOffset: -30
}
axisBottomПравая ось применяется для вторичной шкалы значений.
axisRight: {
tickSize: 5,
tickPadding: 10,
tickRotation: 0,
legend: 'Вторая метрика',
legendPosition: 'middle',
legendOffset: 50
}
При использовании axisRight необходимо учитывать:
При использовании нескольких осей важно учитывать согласование масштабов.
Пример комбинированной логики:
axisLeft — температура (°C)axisRight — влажность (%)Конфигурация:
axisLeft: {
format: v => `${v}°C`
},
axisRight: {
format: v => `${v}%`
}
Несоответствие масштабов может приводить к визуальным искажениям восприятия данных.
Каждая ось поддерживает гибкую настройку текста.
axisBottom: {
tickRotation: 30
}
Используется при:
axisLeft: {
tickPadding: 15
}
Увеличение отступа улучшает читаемость при длинных подписях.
Легенда задаёт смысл оси.
legend: 'Продажи'
Позиционирование:
middle — центр осиstart — началоend — конецСмещение регулируется через:
legendOffset: 40
Отрицательные значения используются для вертикальных осей, чтобы вывести текст наружу графика.
Любую ось можно полностью скрыть:
axisTop: null,
axisRight: null
Или:
axisBottom: {
tickSize: 0,
tickPadding: 0,
tickValues: []
}
Отключение осей часто применяется в:
Параметр tickValues позволяет явно задать значения:
axisBottom: {
tickValues: ['Jan', 'Feb', 'Mar']
}
Для числовых шкал:
axisLeft: {
tickValues: 5
}
или диапазон:
axisLeft: {
tickValues: [0, 50, 100]
}
Функции форматирования позволяют адаптировать вывод под любые требования:
axisLeft: {
format: value => `${value.toFixed(2)} ₽`
}
или динамическое преобразование:
axisBottom: {
format: value => new Date(value).getFullYear()
}
Это особенно важно при работе с временными данными и финансовыми метриками.
При большом количестве значений оси автоматически перегружаются:
Ручное управление:
axisBottom: {
tickValues: 'every 2'
}
Одновременное использование всех осей:
axisBottom: { legend: 'X' },
axisTop: { legend: 'X copy' },
axisLeft: { legend: 'Y' },
axisRight: { legend: 'Y secondary' }
Такая конфигурация применяется в аналитических интерфейсах, где требуется максимальная информативность.
Каждая активная ось влияет на внутренние отступы графика:
Это важно учитывать при встраивании графиков в ограниченные контейнеры.
Разные компоненты Nivo по-разному используют оси:
ResponsiveBar — категории + значенияResponsiveLine — непрерывные шкалыResponsiveScatterPlot — обе оси числовыеКаждый тип графика требует индивидуальной настройки
axis* для корректного отображения данных.