Skip to content

Treemap

Иерархические серии без осей. Данные — вложенные через children; значение узла — sizeField листа или сумма потомков.

Treemap

Squarify-раскладка: вложенные прямоугольники, группы с заголовками.

ts
import { getData } from './data';
import type { ChartOptions } from 'grafit-charts';

export function createOptions(): ChartOptions {
  return {
    data: getData(),
    title: { text: 'Lines of code by module' },
    series: [{ type: 'treemap', labelField: 'label', sizeField: 'size' }],
    legend: { enabled: false },
  };
}
ts
export function getData() {
  return [
    {
      label: 'Frontend',
      children: [
        { label: 'app', size: 420 },
        { label: 'widgets', size: 180 },
        { label: 'shared', size: 310 },
      ],
    },
    {
      label: 'Backend',
      children: [
        { label: 'api', size: 540 },
        { label: 'workers', size: 230 },
        { label: 'db', size: 160 },
      ],
    },
    {
      label: 'Infra',
      children: [
        { label: 'ci', size: 90 },
        { label: 'deploy', size: 140 },
      ],
    },
  ];
}

Подписи и отступы плиток

label — как у heatmap: placement (9 позиций), formatter, шрифт; цвет подбирается автоконтрастом по плитке. itemPadding — зазор между плитками:

ts
import { getData } from './data';
import type { ChartOptions } from 'grafit-charts';

export function createOptions(): ChartOptions {
  return {
    data: getData(),
    title: { text: 'Tile labels and padding' },
    series: [
      {
        type: 'treemap',
        labelField: 'label',
        sizeField: 'size',
        itemPadding: 5,
        label: {
          enabled: true,
          placement: 'top-left',
          formatter: ({ label, value }) => `${label} · ${value}`,
          fontSize: 12,
          fontWeight: 'bold',
        },
      },
    ],
    legend: { enabled: false },
  };
}
ts
export function getData() {
  return [
    {
      label: 'Frontend',
      children: [
        { label: 'App', size: 34 },
        { label: 'Widgets', size: 22 },
        { label: 'UI Kit', size: 18 },
        { label: 'Utils', size: 8 },
      ],
    },
    {
      label: 'Backend',
      children: [
        { label: 'API', size: 28 },
        { label: 'Jobs', size: 14 },
        { label: 'Auth', size: 9 },
      ],
    },
    {
      label: 'Infra',
      children: [
        { label: 'CI', size: 12 },
        { label: 'IaC', size: 10 },
      ],
    },
  ];
}

Опции

Общие опции всех серий (name, showInLegend, tooltip.renderer, …) — в разделе Общие опции серий.

ОпцияСерииПо умолчаниюОписание
groupHeaderHeighttreemap18высота заголовка группы
fillsвсепалитрацвета ветвей/слоёв
itemPaddingtreemap2зазор между плитками
labelFieldtreemaplabel/size/childrenключи иерархии
sizeFieldtreemaplabel/size/childrenключи иерархии
childrenFieldtreemaplabel/size/childrenключи иерархии
label.enabledbooleantrueпоказать подписи значений
label.placementcenter, края и углы (9 позиций)'center'позиция подписи
label.formatter({ datum, label, value }) => stringзначениесодержимое подписи
label.fontSizePixels11размер шрифта подписи
label.fontWeightstring | numbernormalнасыщенность
label.fontFamilystringшрифт темыгарнитура
label.colorColorValueforeground; внутри — автоконтрастцвет текста