Компонент Histogram в экосистеме Nivo используется для визуализации распределения числовых значений через интервалы (бины), позволяя анализировать частотность, плотность и форму распределения данных. В отличие от линейных и столбчатых графиков, гистограмма фокусируется не на отдельных категориях, а на диапазонах значений, автоматически группируя данные по интервалам и отображая количество попаданий в каждый из них.
Основная идея компонента заключается в преобразовании непрерывного набора чисел в дискретные интервалы с последующим отображением их частот. Это делает Histogram особенно полезным для анализа статистических распределений, оценки выбросов и понимания структуры данных.
Компонент Histogram входит в пакет визуализации Nivo и обычно используется через адаптивную обёртку, обеспечивающую автоматическую подстройку под размеры контейнера.
Установка пакета:
npm install @nivo/histogram
Импорт компонента:
import { ResponsiveHistogram } from '@nivo/histogram'
Использование адаптивного варианта предпочтительно, поскольку он автоматически масштабируется под родительский контейнер без ручного задания размеров.
Histogram в Nivo работает с набором числовых значений, которые затем группируются в интервалы. Источник данных может быть представлен в двух основных формах:
const data = [12, 15, 18, 18, 21, 22, 22, 23, 30, 31, 35]
const data = [
{ value: 12 },
{ value: 15 },
{ value: 18 },
{ value: 18 },
{ value: 21 }
]
Во втором случае требуется указание функции доступа к значению.
Histogram должен понимать, где находится числовое значение в данных:
value="value"
или через функцию:
value={d => d.value}
Это определяет базу для построения распределения.
Один из центральных параметров — число интервалов разбиения:
binCount={10}
Увеличение числа интервалов повышает детализацию распределения, но может снижать читаемость при малых выборках. Уменьшение — сглаживает картину и подчёркивает общие тенденции.
Вместо количества можно задать явные границы:
bins={[0, 10, 20, 30, 40, 50]}
В этом случае данные группируются строго по указанным диапазонам. Такой подход используется при необходимости унификации визуализаций между несколькими графиками или при работе с заранее определёнными шкалами.
import { ResponsiveHistogram } from '@nivo/histogram'
const data = [
{ value: 12 },
{ value: 15 },
{ value: 18 },
{ value: 18 },
{ value: 21 },
{ value: 22 },
{ value: 23 },
{ value: 30 }
]
const HistogramChart = () => (
<div style={{ height: 400 }}>
<ResponsiveHistogram
data={data}
value="value"
binCount={6}
margin={{ top: 20, right: 20, bottom: 50, left: 50 }}
/>
</div>
)
Компонент автоматически выполняет разбиение данных и строит столбцы, отражающие частоту попадания значений в каждый интервал.
Histogram использует стандартную систему осей Nivo:
Отображает интервалы значений (бины). Настраивается через
axisBottom:
axisBottom={{
tickSize: 5,
tickPadding: 5,
legend: 'Значения',
legendPosition: 'middle',
legendOffset: 40
}}
Отражает частоту попаданий:
axisLeft={{
tickSize: 5,
tickPadding: 5,
legend: 'Частота',
legendPosition: 'middle',
legendOffset: -40
}}
Оси играют ключевую роль в интерпретации формы распределения: симметричность, скошенность, наличие пиков.
Histogram поддерживает как статические, так и динамические схемы цветов:
colors={{ scheme: 'nivo' }}
или функция:
colors={bar => bar.index % 2 === 0 ? '#4682b4' : '#82ca9d'}
Цветовое кодирование используется для усиления читаемости распределения, особенно при сравнении нескольких серий данных.
Параметр margin управляет пространством вокруг
графика:
margin={{ top: 30, right: 30, bottom: 60, left: 60 }}
Корректная настройка отступов критична для корректного отображения подписей осей и легенд.
Nivo Histogram поддерживает анимацию переходов между состояниями:
animate={true}
motionConfig="gentle"
Анимация особенно заметна при изменении данных или пересчёте интервалов, визуально подчеркивая динамику распределения.
Tooltip предоставляет детальную информацию о каждом интервале:
tooltip={({ bin }) => (
<div>
<strong>Интервал:</strong> {bin.start} – {bin.end}
<br />
<strong>Частота:</strong> {bin.count}
</div>
)}
Внутренняя структура bin содержит границы интервала и
количество элементов, попавших в него. Это позволяет интерпретировать
каждый столбец как статистический сегмент.
Histogram может использоваться не только для частот, но и для анализа плотности. В этом случае важна нормализация значений:
Подобная нормализация выполняется на уровне подготовки данных или через трансформацию значений в tooltip и оси.
Хотя Histogram в первую очередь ориентирован на одно распределение, возможны сценарии сравнения нескольких наборов данных через предварительную агрегацию:
const data = [
{ value: 10, group: 'A' },
{ value: 12, group: 'A' },
{ value: 20, group: 'B' },
{ value: 25, group: 'B' }
]
В таких случаях группировка выполняется либо вручную, либо через отдельные экземпляры компонента, чтобы сохранить читаемость распределений.
При небольших наборах данных Histogram может демонстрировать “ступенчатую” структуру, где отдельные бины содержат мало значений. Это делает распределение менее гладким, но более точным.
При больших наборах данных ключевым фактором становится выбор
binCount, так как слишком мелкая детализация приводит к
шуму, а слишком крупная — к потере структуры.
Histogram позволяет выявлять:
Форма графика напрямую отражает свойства исходного набора данных, что делает компонент важным инструментом в аналитике, статистике и исследовании данных.
Внутренний алгоритм разбиения может зависеть от выбранных параметров:
Контроль над этим процессом позволяет адаптировать визуализацию под конкретную задачу анализа: от исследовательской до прикладной.
Histogram часто используется как элемент дашбордов, где он выполняет роль первичного инструмента оценки распределения. В связке с фильтрами и интерактивными элементами он позволяет исследовать данные в разрезе диапазонов, выявляя локальные особенности и аномалии без необходимости табличного анализа.