Компонент Waffle из экосистемы Nivo предназначен для визуализации долей и пропорций через сетку одинаковых ячеек. Такой тип графика часто используется как альтернатива круговым диаграммам, когда требуется более наглядное представление распределения значений в дискретной форме.
Waffle-диаграмма представляет собой прямоугольную решётку, где каждая ячейка соответствует фиксированной части общего значения. Закрашенные элементы отображают вклад категории в общий объём, а незакрашенные — оставшуюся часть или другие категории.
Компонент Waffle работает с массивом объектов, каждый из которых описывает категорию и её значение.
const data = [
{
id: 'JavaScript',
label: 'JavaScript',
value: 40,
color: '#f1e05a',
},
{
id: 'TypeScript',
label: 'TypeScript',
value: 25,
color: '#2b7489',
},
{
id: 'Python',
label: 'Python',
value: 35,
color: '#3572A5',
},
]
Ключевой параметр — value. Он определяет количество
клеток, которое будет занято категорией относительно общего числа.
В Nivo используется компонент ResponsiveWaffle, который
автоматически адаптируется к размерам контейнера.
import { ResponsiveWaffle } from '@nivo/waffle'
Минимальная конфигурация:
<ResponsiveWaffle
data={data}
total={100}
rows={10}
columns={10}
margin={{ top: 10, right: 10, bottom: 10, left: 10 }}
colors={{ scheme: 'nivo' }}
borderColor={{ from: 'color', modifiers: [['darker', 0.3]] }}
/>
Параметр total определяет общее количество условных
единиц, которые распределяются по сетке.
rows и columns задают геометрию сеткиrows × columns должно соответствовать или
превышать totalПример:
total = 100
rows = 10
columns = 10
Каждая клетка = 1%
Массив категорий с числовыми значениями.
Общая сумма, на которую нормализуются значения.
total={100}
Если сумма значений меньше total, часть сетки остаётся
пустой.
Определяют структуру мозаики:
rows={6}
columns={10}
Используется прямоугольная сетка, где важна читаемость:
Управляет расстоянием между ячейками.
padding={1}
Поддерживаются различные способы задания цветов:
colors={{ scheme: 'set3' }}
Или через функцию:
colors={(node) => node.data.color}
Также возможно использование интерполяции:
colors={{ datum: 'color' }}
Позволяет управлять границами клеток:
borderColor={{ from: 'color', modifiers: [['darker', 0.4]] }}
Часто используется для повышения контраста между соседними элементами.
Waffle распределяет ячейки последовательно по категориям, создавая визуальные блоки.
Пример поведения:
Компонент поддерживает встроенные анимации переходов при изменении данных.
motionConfig="gentle"
Доступные пресеты:
wobblygentlestiffmolassesАнимации влияют на:
Для повышения информативности используются элементы:
enableLabels={true}
Позволяет отображать подписи внутри блоков или рядом с ними.
Компонент поддерживает базовую ARIA-разметку, включая:
Tooltip активируется при наведении:
tooltip={({ value, id }) => (
<div>
<strong>{id}</strong>: {value}
</div>
)}
Типичная структура данных в tooltip:
Nivo использует систему тем:
theme={{
fontSize: 12,
textColor: '#333',
grid: {
line: {
stroke: '#eee',
},
},
}}
Параметры темы применяются ко всем визуальным элементам:
Nivo поддерживает SVG-паттерны через defs и
fill.
defs={[
{
id: 'dots',
type: 'patternDots',
background: 'inherit',
color: '#ffffff',
size: 4,
padding: 1,
stagger: true,
},
]}
Применение:
fill={[
{
match: {
id: 'JavaScript',
},
id: 'dots',
},
]}
Waffle может заполняться в разных направлениях:
Хотя прямой проп настройки направления нет, поведение зависит от порядка данных и геометрии сетки.
При работе с большими наборами данных учитываются следующие факторы:
rows × columns для снижения количества
DOM-элементов<ResponsiveWaffle
data={data}
total={100}
rows={10}
columns={10}
padding={2}
colors={{ scheme: 'paired' }}
borderColor={{ from: 'color', modifiers: [['darker', 0.5]] }}
enableLabels={true}
labelTextColor="#000"
motionConfig="gentle"
tooltip={({ id, value }) => (
<div>
{id}: {value}
</div>
)}
defs={[
{
id: 'lines',
type: 'patternLines',
background: 'inherit',
color: '#fff',
rotation: -45,
lineWidth: 6,
spacing: 10,
},
]}
fill={[
{
match: { id: 'Python' },
id: 'lines',
},
]}
/>
При обновлении массива data происходит перераспределение
заполненных ячеек:
Важно учитывать стабильность id, так как они
используются для сопоставления категорий.
Waffle-диаграммы имеют ряд структурных особенностей:
Чаще всего мозаичные диаграммы применяются для:
В интерфейсах мониторинга Waffle используется как компактная альтернатива столбчатым и круговым диаграммам, особенно при необходимости подчеркнуть дискретную природу данных.