Система сетки в Nivo является базовым слоем визуализации, на который накладываются оси, серии данных, аннотации и интерактивные элементы. В большинстве компонентов (Line, Bar, Scatter, Stream) сетка формируется двумя независимыми осями: вертикальной и горизонтальной, управляемыми параметрами gridX и gridY.
Сетка в графиках выполняет функцию ориентира для восприятия значений. Она не влияет на вычисления данных, но напрямую влияет на читаемость:
В Nivo сетка является частью SVG-рендеринга и зависит от масштаба осей, доменов и tick-конфигурации.
Параметр gridY управляет отображением горизонтальных линий сетки, соответствующих значениям по оси Y.
<ResponsiveLine
data={data}
margin={{ top: 50, right: 50, bottom: 50, left: 60 }}
gridY={true}
/>
При значении true библиотека автоматически строит линии
на основе tick-значений оси Y.
gridY={false}
Полное отключение горизонтальных линий применяется при необходимости минималистичного интерфейса или при наложении кастомных фоновых слоёв.
Если задана ось Y через yScale и axisLeft,
сетка адаптируется к tick-логике:
axisLeft={{
tickSize: 0,
tickPadding: 10,
tickRotation: 0
}}
Изменение tick-конфигурации напрямую влияет на частоту горизонтальных линий.
Параметр gridX управляет вертикальными линиями сетки, соответствующими оси X.
<ResponsiveLine
data={data}
gridX={true}
/>
При временных рядах (time scale) вертикальная сетка часто совпадает с датами или интервалами времени.
gridX={false}
Используется в случаях, когда ось X перегружена (например, длинные подписи категорий) или требуется акцент на тренде без временных делений.
Комбинация двух параметров формирует классическую координатную плоскость:
gridX={true}
gridY={true}
При этом:
Одним из ключевых механизмов управления сеткой является привязка к
пользовательским значениям через tickValues.
axisLeft={{
tickValues: [0, 20, 40, 60, 80, 100]
}}
В этом случае горизонтальная сетка будет строго соответствовать указанным уровням.
axisLeft={{
tickValues: "every 10"
}}
Логика деления зависит от диапазона данных и автоматически подстраивается под domain.
Сетка в Nivo не существует отдельно от шкал. Изменение scale напрямую влияет на gridX/gridY.
yScale={{
type: "linear",
min: 0,
max: 100
}}
При фиксированном диапазоне сетка становится равномерной и предсказуемой.
yScale={{
type: "log",
base: 10,
min: 1,
max: 1000
}}
В этом случае линии сетки распределяются неравномерно, отражая экспоненциальный рост значений.
Nivo предоставляет централизованную настройку внешнего вида сетки
через theme.
theme={{
grid: {
line: {
stroke: "#e0e0e0",
strokeWidth: 1
}
}
}}
Хотя глобальный theme влияет на оба направления, часто требуется визуально различать их через кастомные слои:
gridX={true}
gridY={true}
theme={{
grid: {
line: {
stroke: "#ddd",
strokeDasharray: "4 4"
}
}
}}
Иногда требуется оставить только оси без фоновой структуры:
gridX={false}
gridY={false}
axisLeft={{ tickSize: 5 }}
axisBottom={{ tickSize: 5 }}
Это характерно для дашбордов, где сетка заменяется направляющими или tooltip-интеракциями.
В Bar-компонентах сетка работает аналогично Line, но привязка по X часто категориальная.
<ResponsiveBar
data={data}
gridX={true}
gridY={true}
/>
Особенность:
Хотя gridX/gridY не являются вычислительно тяжёлыми, чрезмерное количество tick-значений приводит к:
Оптимизация достигается через:
axisBottom={{
tickValues: "every 5"
}}
или ограничение domain:
yScale={{
min: 0,
max: 200
}}
Сетка отрисовывается внутри области графика, определяемой margin:
margin={{ top: 40, right: 40, bottom: 60, left: 60 }}
Недостаточный margin приводит к:
Nivo позволяет полностью заменить стандартную сетку через систему layers.
layers={[
"grid",
"axes",
"lines",
"points"
]}
При исключении "grid" можно реализовать собственную
отрисовку:
const CustomGrid = ({ width, height, yScale }) => {
const lines = yScale.ticks(5).map(value => ({
y: yScale(value)
}));
return lines.map((line, i) => (
<line
key={i}
x1={0}
x2={width}
y1={line.y}
y2={line.y}
stroke="#ccc"
/>
));
};
Grid может быть не только сплошным, но и стилизованным:
theme={{
grid: {
line: {
strokeDasharray: "2 2",
strokeOpacity: 0.5
}
}
}}
Часто используются варианты:
Сетка в Nivo формируется как производная от:
Параметры gridX и gridY выступают переключателями уровней детализации визуальной структуры координатной плоскости, а не изолированными визуальными эффектами.