В библиотеке Nivo метки (labels) используются для отображения текстовой информации, связанной с визуальными элементами графиков: столбцами, секторами, точками, линиями и сегментами. Они выполняют функцию визуальной аннотации данных и часто становятся ключевым элементом интерпретации графика.
В большинстве компонентов Nivo метки управляются через набор стандартных свойств, которые позволяют гибко настраивать их отображение, форматирование и поведение.
В компоненте столбчатой диаграммы ResponsiveBar метки
активируются по умолчанию и отображаются внутри или рядом со
столбцами:
import { ResponsiveBar } from '@nivo/bar'
const data = [
{ country: 'A', value: 42 },
{ country: 'B', value: 81 }
]
<ResponsiveBar
data={data}
keys={['value']}
indexBy="country"
label={(d) => `${d.value}`}
/>
Ключевые особенности:
label задаёт функцию формирования текста меткиdФорматирование меток позволяет контролировать представление чисел, единиц измерения и текста:
label={(d) => `${d.value.toFixed(1)} ед.`}
Часто используется:
Для круговых диаграмм (ResponsivePie) форматирование
особенно важно:
<ResponsivePie
data={[
{ id: 'JavaScript', value: 55 },
{ id: 'Python', value: 45 }
]}
valueFormat={(v) => `${v}%`}
/>
Здесь valueFormat влияет на отображение значений в
подсказках и легендах.
В различных компонентах Nivo метки могут располагаться внутри или снаружи графических элементов.
В ResponsiveBar используется свойство:
labelPosition="inside"
Возможные варианты:
inside — метка внутри элементаoutside — метка снаружи (если поддерживается типом
графика)При недостатке пространства метки автоматически скрываются или обрезаются в зависимости от настроек перекрытия.
Стили меток задаются через theme:
<ResponsiveBar
data={data}
keys={['value']}
indexBy="country"
theme={{
labels: {
text: {
fontSize: 12,
fill: '#333333'
}
}
}}
/>
Основные параметры:
fontSize — размер текстаfill — цветfontWeight — насыщенностьtextShadow — тень для повышения читаемостиВ сложных визуализациях часто применяется условное форматирование меток в зависимости от значения:
label={(d) =>
d.value > 50 ? `HIGH: ${d.value}` : `${d.value}`
}
Подсказки (tooltips) в Nivo представляют собой интерактивные элементы, отображающие подробную информацию о данных при наведении курсора или фокусе на элементе графика. Они являются одним из основных инструментов анализа данных в визуализациях.
В отличие от меток, которые статичны, подсказки динамически создаются во время взаимодействия с графиком.
В большинстве компонентов подсказки включены по умолчанию:
<ResponsiveBar
data={data}
keys={['value']}
indexBy="country"
tooltip={({ id, value, color }) => (
<div style={{ padding: 12, background: '#fff' }}>
<strong style={{ color }}>{id}</strong>: {value}
</div>
)}
/>
Параметры:
tooltip — функция, возвращающая React-элементВ зависимости от визуализации структура отличается:
Bar chart:
id — идентификатор серииvalue — значениеindexValue — категорияPie chart:
datum.id — секторdatum.value — значениеdatum.color — цвет сектораLine chart:
point.data.xpoint.data.ypoint.serieIdПодсказки в Nivo полностью заменяемы. Часто используется вынесенный компонент:
const CustomTooltip = ({ point }) => (
<div
style={{
padding: 10,
background: 'white',
border: '1px solid #ccc'
}}
>
<div>Ось X: {point.data.x}</div>
<div>Ось Y: {point.data.y}</div>
</div>
)
<ResponsiveLine
data={data}
tooltip={CustomTooltip}
/>
Преимущества такого подхода:
В некоторых случаях интерактивность не требуется:
<ResponsiveBar
data={data}
keys={['value']}
indexBy="country"
enableTooltip={false}
/>
Такое отключение снижает нагрузку на DOM и улучшает производительность при больших наборах данных.
Подсказки в Nivo используют систему позиционирования, которая автоматически рассчитывает оптимальное размещение относительно курсора.
Основные особенности:
Для кастомного позиционирования применяется обёртка или внешний контейнер:
tooltip={({ value }) => (
<div style={{ transform: 'translate(-50%, -100%)' }}>
{value}
</div>
)}
Часто данные требуют преобразования перед отображением:
tooltip={({ value }) => (
<div>
Значение: {(value * 100).toFixed(2)}%
</div>
)}
Типовые операции:
Метки и подсказки выполняют разные, но взаимодополняющие функции:
В сложных визуализациях применяется комбинированный подход:
Пример:
<ResponsiveBar
data={data}
keys={['value']}
indexBy="country"
label={(d) => d.value}
tooltip={({ data }) => (
<div>
Страна: {data.country}
<br />
Полное значение: {data.value}
</div>
)}
/>
При работе с плотными наборами данных метки и подсказки требуют балансировки:
Типовой подход для bar charts:
label={(d) => (d.value > 20 ? d.value : '')}
Такой механизм снижает визуальный шум и улучшает восприятие структуры данных.
Метки могут изменяться в зависимости от состояния компонента или внешних параметров:
label={(d) =>
d.id === selectedId ? `▶ ${d.value}` : `${d.value}`
}
Подобная логика позволяет:
Для унификации отображения значений применяются форматтеры:
const formatValue = (v) => `${v.toLocaleString()} ₽`
<ResponsiveBar
data={data}
keys={['value']}
indexBy="country"
label={formatValue}
tooltip={({ value }) => formatValue(value)}
/>
Форматтеры обеспечивают: