В библиотеке Nivo полярные визуализации строятся на системе координат, где данные отображаются относительно центра, а не вдоль привычных осей X/Y. В этой системе сетка делится на радиальную и угловую, каждая из которых отвечает за отдельный аспект визуального ориентирования.
Радиальная сетка формируется концентрическими окружностями, задающими уровни значений. Угловая сетка представлена лучами, исходящими из центра и разделяющими круг на сектора. Совместная работа этих элементов создаёт структуру, аналогичную декартовой сетке, но адаптированную для полярных графиков.
Полярная система координат задаётся парой значений:
Переход к декартовым координатам выполняется через:
x = r (), y = r ()
В Nivo эта модель используется внутри компонентов полярных диаграмм, включая radar charts, radial bar charts и polar heatmaps.
Радиальная сетка отвечает за деление шкалы значений по расстоянию от центра. В Nivo она реализуется как набор окружностей с равным или пользовательским шагом.
Основные параметры:
В radar charts радиальная сетка часто используется как основной ориентир для оценки величин категорий.
Пример конфигурации:
<Radar
data={data}
keys={['A', 'B', 'C']}
indexBy="category"
maxValue="auto"
margin={{ top: 40, right: 40, bottom: 40, left: 40 }}
gridLevels={5}
gridShape="circular"
gridLabelOffset={12}
enableDots={true}
dotSize={6}
dotColor={{ theme: 'background' }}
dotBorderWidth={2}
dotBorderColor={{ from: 'color' }}
/>
Радиальная сетка в данном контексте формирует систему измерений, на которую «натягиваются» значения каждой категории.
Угловая сетка в Nivo задаёт деление круга на равные или вычисляемые сектора. Каждый сектор соответствует отдельной категории данных.
Ключевые параметры:
В radar и polar chart угловая сетка задаёт структуру категорий, обеспечивая равномерное распределение по окружности.
Пример настройки:
<Radar
data={data}
keys={['value']}
indexBy="item"
enableAngleLines={true}
angleLineColor="#e0e0e0"
angleLineWidth={1}
startAngle={0}
endAngle={360}
/>
Угловые линии формируют визуальные сектора, внутри которых располагаются значения радиальной шкалы.
Полярные диаграммы Nivo строятся на пересечении двух структур:
Пересечение формирует ячейки, каждая из которых соответствует значению функции:
f(r, )
Такая модель позволяет интерпретировать данные как распределение по двум параметрам одновременно.
Плотность сетки влияет на читаемость и визуальную нагрузку графика.
Радиальная плотность регулируется через:
gridLevelsmaxValueУгловая плотность зависит от количества категорий и параметров углового шага.
Избыточное количество линий приводит к визуальному шуму, тогда как недостаток снижает точность восприятия.
Nivo поддерживает два основных типа:
Многоугольная форма часто используется в radar charts для усиления восприятия угловых различий между категориями.
<Radar
gridShape="linear"
gridLevels={6}
data={data}
keys={['score']}
indexBy="subject"
/>
При линейной форме каждая радиальная окружность превращается в многоугольник, повторяющий количество категорий.
Визуальное оформление сетки влияет на читаемость данных.
Основные параметры стилизации:
gridLineColor — цвет радиальных линийgridLineOpacity — прозрачностьgridLineWidth — толщинаangleLineColor — цвет угловых линийangleLineDashArray — пунктирный стильПример кастомизации:
<Radar
gridLevels={4}
gridLineColor="#cccccc"
gridLineWidth={1}
gridLineOpacity={0.4}
angleLineColor="#999999"
angleLineWidth={0.8}
theme={{
grid: {
line: {
stroke: '#ddd',
strokeWidth: 1
}
}
}}
/>
Стилизация сетки часто используется для снижения визуальной доминанты вспомогательных элементов.
В radial bar charts радиальная сетка выполняет роль шкалы значений. Каждый слой окружности соответствует числовому диапазону.
<ResponsiveRadialBar
data={data}
valueFormat=" >-.2f"
maxValue="auto"
cornerRadius={2}
radialAxisStart={{ tickSize: 5, tickPadding: 5, tickRotation: 0 }}
circularAxisOuter={null}
/>
Здесь концентрические окружности задают уровни прогресса, а угловые сегменты распределяют категории.
Каждый угол соответствует отдельной категории, что делает угловую сетку аналогом оси X в декартовой системе.
При увеличении числа категорий:
Для стабилизации структуры часто используется фиксированное количество сегментов или группировка данных.
При изменении размера контейнера сетка пересчитывается автоматически. Nivo использует SVG-подход, где все линии строятся относительно центра и масштабируются пропорционально.
Радиальная сетка остаётся геометрически стабильной, так как основана на относительных значениях радиуса, а не пикселях.
Сетка не является статическим элементом. Она участвует в интерпретации данных:
В radar chart каждая точка вычисляется как:
(r_i, _i) = (_i, _i )
При работе с большими наборами данных применяются следующие подходы:
gridLevelsСнижение количества элементов сетки напрямую влияет на производительность рендеринга SVG.
Система темизации позволяет унифицировать стиль сетки во всех полярных графиках:
const theme = {
grid: {
line: {
stroke: '#e5e5e5',
strokeWidth: 1
}
},
axis: {
ticks: {
line: {
stroke: '#ccc'
}
}
}
};
Темы обеспечивают согласованность радиальных и угловых элементов между различными типами визуализаций.