В круговых и радиальных диаграммах Nivo текстовые элементы, привязанные к сегментам, выполняют не декоративную, а информационную функцию. В зависимости от типа визуализации используются разные механизмы отображения подписей: arcLabel для сегментов дуг и radialLabel для радиальных шкал и баров. Эти параметры определяют, какой текст отображается, как он вычисляется и в каких условиях становится видимым.
Параметр arcLabel применяется в компонентах, где данные представлены в виде сегментов окружности: pie chart, donut chart и близких к ним визуализациях.
Основная задача — определить текст, который будет отображён внутри каждого сектора дуги.
arcLabel может быть задан несколькими способами:
При простом сценарии достаточно указать ключ поля:
arcLabel: "id"
или
arcLabel: "value"
В этом случае библиотека берёт значение напрямую из объекта данных.
Функция используется для более сложной логики отображения:
arcLabel: (d) => `${d.id}: ${d.value}`
Здесь d — объект сегмента, содержащий:
Функциональный подход позволяет:
В реальных данных часто требуется скрывать подписи для малых сегментов:
arcLabel: (d) => {
if (d.value < 10) return "";
return `${d.value}`;
}
Пустая строка означает отсутствие подписи для конкретного сегмента.
В donut-диаграммах с внутренним отверстием пространство внутри сегмента ограничено, поэтому arcLabel:
Подписи дуг поддерживают стилизацию через theme и индивидуальные настройки слоя (layer).
Основные параметры:
Пример кастомизации:
arcLabelsTextColor: {
from: "color",
modifiers: [["darker", 2]]
},
arcLabelsRadiusOffset: 0.6
Эти настройки позволяют управлять:
При высокой плотности данных возникают проблемы:
Для решения используются стратегии:
Параметр radialLabel используется в радиальных визуализациях, таких как radial bar chart, где данные распределены по окружности, но представлены как радиальные столбцы.
radialLabel отвечает за текстовые подписи, связанные с радиальной осью или отдельными сегментами.
Как и arcLabel, radialLabel поддерживает несколько форматов:
radialLabel: "label"
Используется, когда данные уже содержат готовый текст.
radialLabel: (d) => `${d.label} (${d.value})`
Объект d обычно включает:
Часто radialLabel используется для нормализации данных:
radialLabel: (d) => Math.round(d.value)
или добавления единиц:
radialLabel: (d) => `${d.value} ms`
В радиальных диаграммах текст размещается относительно окружности, поэтому важны параметры:
При плотной компоновке radialLabel может:
Для повышения читаемости применяется поворот:
radialLabelsTextXOffset: 6
radialLabelsTextColor: "#333"
или вычисляемая ориентация:
arcLabel:
radialLabel:
При работе с большими наборами данных критично контролировать визуальный шум.
Применяются подходы:
arcLabel: (d) => d.value > 5 ? d.value : ""
radialLabel: (d) => d.value.toFixed(1)
arcLabel: (d) => d.value > 50 ? "●" : ""
При перегруженной визуализации часть информации переносится в tooltip, а подписи оставляются минимальными:
Это снижает зависимость от постоянных labels и повышает читаемость графика.
Структура данных напрямую влияет на поведение подписей.
Пример для arcLabel:
const data = [
{ id: "A", value: 30 },
{ id: "B", value: 70 }
];
Пример для radialLabel:
const data = [
{ label: "North", value: 40 },
{ label: "South", value: 60 }
];
Если структура нестандартная, mapping выполняется внутри callback:
radialLabel: (d) => d.data.customName
undefined вместо строкиПри включённой анимации подписи:
Функциональные labels должны быть детерминированными, чтобы избежать мерцания.
При большом количестве сегментов:
Оптимизация:
const formatter = (v) => `${v}%`;
arcLabel: (d) => formatter(d.value)