Компонент Pie в библиотеке Nivo (@nivo/pie) работает с
массивом объектов, где каждый элемент представляет отдельный сектор
диаграммы. Базовая структура данных предельно проста, но требует
строгого соблюдения формы.
const data = [
{
id: "React",
value: 35
},
{
id: "Vue",
value: 25
},
{
id: "Angular",
value: 20
}
];
Ключевые поля:
Дополнительно могут использоваться поля:
Минимальная настройка компонента включает передачу данных и размеров контейнера.
import { ResponsivePie } from '@nivo/pie';
const MyPie = () => (
<ResponsivePie
data={data}
margin={{ top: 40, right: 80, bottom: 80, left: 80 }}
innerRadius={0}
padAngle={0}
cornerRadius={0}
activeOuterRadiusOffset={8}
/>
);
Основные параметры:
Переход между классической круговой диаграммой и кольцевой
осуществляется через innerRadius.
innerRadius={0} // круговая диаграмма
innerRadius={0.5} // donut-диаграмма
Значение интерпретируется как доля от внешнего радиуса:
Pie-компонент позволяет точно контролировать форму сегментов.
startAngle={0}
endAngle={360}
padAngle={1}
cornerRadius={4}
Параметры:
Особенность: при увеличении padAngle уменьшается
визуальная плотность диаграммы, что улучшает читаемость при большом
количестве категорий.
Nivo предоставляет гибкую систему управления цветами через
colors.
colors={{ scheme: 'nivo' }}
colors={["#e63946", "#457b9d", "#a8dadc"]}
colors={{ datum: 'id' }}
colors={(datum) => {
if (datum.value > 30) return "#2a9d8f";
return "#e76f51";
}}
Подписи внутри сегментов управляются через
arcLabels.
arcLabelsSkipAngle={10}
arcLabelsTextColor="#ffffff"
arcLabelsRadiusOffset={0.6}
Параметры:
Дополнительно можно отключить подписи полностью:
enableArcLabels={false}
Для сложных диаграмм используются линии-выноски.
enableArcLinkLabels={true}
arcLinkLabelsSkipAngle={10}
arcLinkLabelsTextColor="#333"
arcLinkLabelsThickness={2}
arcLinkLabelsColor={{ from: 'color' }}
Ключевые параметры:
Легенды добавляются через массив legends.
legends={[
{
anchor: 'bottom',
direction: 'row',
translateY: 56,
itemWidth: 100,
itemHeight: 18,
itemTextColor: '#999',
symbolSize: 18,
symbolShape: 'circle'
}
]}
Основные настройки:
Nivo использует встроенную систему анимаций на основе d3 transitions.
animate={true}
motionConfig="gentle"
Доступные пресеты:
wobblystiffgentlemolassesПоведение при наведении:
activeOuterRadiusOffset={10}
activeInnerRadiusOffset={0}
Tooltip позволяет кастомизировать всплывающую информацию.
tooltip={({ datum }) => (
<div style={{ padding: 12, background: "#fff" }}>
<strong>{datum.id}</strong>: {datum.value}
</div>
)}
Доступные данные:
Сортировка влияет на порядок сегментов.
sortByValue={true}
Варианты:
true — сортировка по возрастаниюfalse — порядок из массива данныхПодсветка и поведение активного сегмента:
activeOuterRadiusOffset={8}
activeInnerRadiusOffset={2}
Дополнительно можно управлять состоянием через события:
onMouseEn ter={(datum) => console.log(datum)}
onMouseLe ave={(datum) => console.log("leave", datum)}
Объект theme управляет визуальным стилем:
theme={{
labels: {
text: {
fontSize: 12,
fill: "#333"
}
},
legends: {
text: {
fontSize: 11,
fill: "#666"
}
}
}}
Основные зоны:
Поддержка SVG паттернов позволяет создавать текстурные заливки.
defs={[
{
id: 'dots',
type: 'patternDots',
background: 'inherit',
color: '#38bcb2',
size: 4,
padding: 1
}
]}
Применение:
fill={[
{
match: {
id: 'React'
},
id: 'dots'
}
]}
Типы паттернов:
Компонент Pie объединяет несколько слоёв конфигурации:
Каждый слой независим, но взаимодействует через единый pipeline рендеринга, что позволяет строить как простые круговые диаграммы, так и сложные аналитические визуализации с высокой плотностью информации.