Настройка рядов, колонок и отступов ячеек

Расположение элементов в Nivo строится вокруг принципа декларативной конфигурации, где структура данных и параметры визуализации определяют сетку отображения. Для визуализаций, основанных на прямоугольной или табличной модели (heatmap, treemap-подобные представления, bar chart с группировкой), управление рядами, колонками и отступами ячеек становится ключевым инструментом формирования читаемой композиции.

В сеточных визуализациях Nivo данные интерпретируются как двумерная структура, где:

  • Колонки определяются набором ключей (keys)
  • Ряды задаются индексным полем (indexBy) или структурой входного массива
  • Ячейки представляют пересечение ряда и колонки

В зависимости от компонента, эта модель реализуется по-разному:

  • В тепловых картах (@nivo/heatmap) строки формируются через indexBy, а колонки через keys
  • В столбчатых графиках (@nivo/bar) ряды соответствуют элементам массива, а колонки — категориям внутри них
  • В древовидных и упаковочных структурах логика рядов и колонок заменяется иерархией, но визуально может интерпретироваться как сетка блоков

Формирование колонок через keys

Ключи задают фиксированное множество колонок:

keys: ['A', 'B', 'C', 'D']

Каждый ключ становится отдельной вертикальной осью, а значения данных сопоставляются этим осям. Порядок ключей определяет порядок колонок в визуализации.

Формирование рядов через indexBy

Для тепловых карт и табличных структур:

indexBy: 'country'

Каждое уникальное значение поля формирует отдельный ряд. Таким образом создаётся матрица:

  • строки → уникальные значения indexBy
  • столбцы → keys

Настройка плотности сетки

Плотность отображения определяется соотношением количества рядов и колонок к доступному пространству. Nivo не управляет этим напрямую через фиксированную сетку, но предоставляет инструменты косвенной настройки:

  • margin — внешние отступы компонента
  • innerPadding (в отдельных компонентах) — внутренние интервалы между группами
  • padding — расстояние между элементами внутри категорий

В bar chart ключевым параметром становится:

padding: 0.3

Этот параметр управляет расстоянием между столбцами внутри одной категории. Чем выше значение, тем более «воздушной» становится сетка.

Отступы ячеек (cell spacing)

Отступы между ячейками влияют на читаемость структуры и визуальное разделение данных.

В различных компонентах Nivo используются разные подходы:

Heatmap

В @nivo/heatmap ключевым параметром является:

  • cellOpacity
  • cellBorderColor
  • cellBorderWidth

Хотя прямого параметра cellSpacing нет, эффект разделения достигается через:

  • толщину границ
  • контраст заливки
  • уменьшение визуальной плотности

Пример конфигурации:

cellBorderWidth: 2,
cellBorderColor: '#ffffff'

Белая граница создаёт эффект сеточного отступа между ячейками, визуально заменяя spacing.

Bar chart

В столбчатых графиках расстояние между элементами определяется через комбинацию:

  • padding — расстояние между группами
  • categorySpacing (внутренний механизм layout)
  • barComponent размеры

При уменьшении padding столбцы начинают «слипаться», образуя плотную колонковую структуру.

Управление размером ячеек

Размер ячейки в Nivo не задаётся напрямую, а вычисляется автоматически:

  • ширина = доступная ширина / количество колонок
  • высота = доступная высота / количество рядов

Однако можно влиять на итоговую геометрию через:

  • height и width контейнера
  • margin
  • количество категорий (рядов и колонок)

Чем больше элементов в сетке, тем меньше каждая ячейка при фиксированном контейнере.

Выравнивание и распределение сетки

Nivo использует систему автоматического распределения, где важно учитывать:

  • равномерность данных по ключам
  • наличие пустых значений
  • порядок сортировки рядов

Для контроля используются:

enableGridX: true
enableGridY: true

В некоторых компонентах это влияет не только на отображение линий сетки, но и на восприятие структуры рядов и колонок.

Влияние сортировки на структуру рядов

Сортировка данных напрямую изменяет визуальную структуру:

  • сортировка рядов влияет на вертикальную последовательность
  • сортировка ключей влияет на горизонтальную структуру

В heatmap часто используется предварительная обработка:

data.sort((a, b) => a.value - b.value)

Это приводит к перераспределению плотности цветовых зон по сетке.

Компоновка с адаптивной сеткой

Nivo построен на SVG и responsive контейнерах, поэтому структура рядов и колонок зависит от размеров контейнера.

При изменении ширины:

  • количество пикселей на ячейку уменьшается
  • текст внутри ячеек может обрезаться
  • сетка сохраняет пропорции

При изменении высоты:

  • ряды становятся плотнее или разреженнее
  • может изменяться читаемость подписей

Работа с перекрытиями и плотностью

При высокой плотности данных возникает проблема перекрытия:

  • подписи осей пересекаются
  • текст внутри ячеек становится нечитаемым
  • визуальные границы теряются

Для решения используются:

  • уменьшение количества рядов (агрегация данных)
  • сокращение числа колонок
  • увеличение margin
  • поворот подписей осей

Практика настройки сетки heatmap

Типичная конфигурация плотной сетки:

<ResponsiveHeatMap
  data={data}
  keys={['a', 'b', 'c', 'd', 'e']}
  indexBy="id"
  margin={{ top: 50, right: 60, bottom: 60, left: 80 }}
  cellBorderWidth={1}
  cellBorderColor="#ffffff"
  enableLabels={false}
/>

Здесь структура рядов и колонок становится основой визуальной матрицы, а отступы формируются границами и внешними полями.

Баланс между читаемостью и плотностью данных

Основная задача настройки рядов, колонок и отступов заключается в поиске баланса:

  • увеличение плотности повышает информационную ёмкость
  • увеличение отступов повышает читаемость
  • уменьшение количества колонок улучшает восприятие структуры
  • увеличение рядов усложняет вертикальную навигацию

Оптимальная конфигурация достигается через итеративную настройку параметров layout и визуальных разделителей, где каждый элемент сетки остаётся различимым без потери целостности общей структуры данных.