BarChart
Отобразите каждый элемент данных в виде полосы, подходящей для сравнения категориальных значений. Его можно расположить горизонтально или вертикально, задать числовые диапазоны, метки категорий и числовые метки, а также поддерживать положительные и отрицательные значения.
Пример
function main() {
return (
<BarChart
data={[
{ value: 30, label: 'A' },
{ value: 70, label: 'B' },
]}
axis="vertical"
rangeY={[0, 100]}
showLabels={true}
showValueLabels={true}
background={$env.accent}
cornerRadius={6}
yAxis={{ stroke: $env.foreground, lineWidth: 1 }}
/>
);
}
Использование
- Элемент data — один столбец, категории идут по массиву, x не нужен. При horizontal диапазон значений всё равно rangeY. Автодиапазон включает ноль, отрицательные идут за базовую линию; background красит столбцы.
- rangeX/rangeY ограничивают числа, не подписи. Скрытие подписей не скрывает оси: используйте stroke="clear". Для исключения наложений выбирается часть подписей, показ всех не гарантирован.
- contentAnimation меняет текст, изображения и структурные данные. interpolate требует совпадения количества точек/closed Polyline, команд Path или структуры графика. При изменении структуры обновление мгновенное.
Свойства
dataReadonlyArray<BarChartDataPoint>Категории в порядке массива. Каждый элемент содержит числовое значение и необязательную подпись.
[{value: 10, label: "A"}, {value: 20, label: "B"}, {value: 30, label: "C"}]axis?"horizontal" | "vertical"Направление: vertical слева направо; horizontal сверху вниз.
"vertical"rangeY?ChartRangeВидимый диапазон [min, max]. Без него диапазон подбирается по данным и включает ноль.
[0, 100]showLabels?booleanПоказывать подписи категорий. Отсутствующие остаются пустыми; нативная компоновка предотвращает наложения.
trueshowValueLabels?booleanПоказывать автоматически созданные числовые подписи оси.
truebarThickness?number | "auto"Толщина столбцов в точках или auto по расстоянию между категориями.
"auto"xAxis?ChartAxisStyleГоризонтальная ось внизу графика. По умолчанию основной цвет, ширина 1pt; stroke: clear скрывает линию.
{stroke: HDR($env.foreground), lineWidth: 1}yAxis?ChartAxisStyleВертикальная ось слева графика. По умолчанию основной цвет, ширина 1pt; stroke: clear скрывает линию.
{stroke: HDR($env.foreground), lineWidth: 1}background?PaintЗаливка каждого столбца. По умолчанию используется основной цвет темы.
HDR($env.dark ? "white" : "black")cornerRadius?numberРадиус углов каждого столбца, ограниченный его размером.
0stroke?PaintЦвет или градиент обводки; clear скрывает её.
"clear"lineWidth?numberТолщина линии в пунктах; 0 не рисует линию.
2strokePosition?"inside" | "center" | "outside"Положение обводки относительно каждого столбца. По умолчанию inside.
"inside"dash?number[]Чередующиеся длины штрихов и пробелов в пунктах; пустой массив даёт сплошную линию.
[]dashPhase?numberСмещение штрихового узора в пунктах.
0contentAnimation?ContentAnimationНеобязательный переход. interpolate требует одинакового числа категорий и направления; иначе обновляет сразу.
{type: "interpolate", duration: 0.25}Общие свойства
width?number | "auto" | "fill"Ширина в пунктах, автоматический размер или заполнение родителя.
"fill"height?number | "auto" | "fill"Высота в пунктах, автоматический размер или заполнение родителя.
"fill"x?numberВизуальное смещение в пунктах: x вправо, y вниз. Место в раскладке не меняется.
0y?numberВизуальное смещение в пунктах: x вправо, y вниз. Место в раскладке не меняется.
0transform?ViewTransformПреобразование всего View без изменения раскладки. Сдвиг в пунктах, поворот/наклон в градусах, масштаб 1 без изменений, якоря 0–1.
{rotation: 0}opacity?numberНепрозрачность всего View: 0 прозрачно, 1 непрозрачно.
1clipped?booleanОбрезать рисунок за границами View.
falseclip?"rectangle" | "ellipse"Форма обрезки rectangle или ellipse; Material также принимает false для отключения.
"rectangle"mask?View | nullView альфа-маски. По центру без влияния на компоновку; null отключает маску.
<Circle width="fill" height="fill" background="white"/>zIndex?numberПорядок среди соседей; большее значение выводится впереди.
0blur?numberРадиус размытия в пунктах; 0 отключает его.
4innerShadow?DrawingEffectЦвет, непрозрачность, радиус размытия и смещение x/y эффекта; расстояния в пунктах.
{color: HDR("black"), opacity: 0.5, radius: 4, x: 0, y: 2}glow?DrawingEffectЦвет, непрозрачность, радиус размытия и смещение x/y эффекта; расстояния в пунктах.
{color: HDR("cyan"), radius: 8, opacity: 0.8}shadowColor?ColorЦвет внешней тени.
HDR("black")shadowOpacity?numberНепрозрачность тени 0–1; 0 скрывает её.
0shadowRadius?numberРадиус размытия внешней тени в пунктах.
4shadowX?numberСмещение тени в пунктах: x вправо, y вниз.
0shadowY?numberСмещение тени в пунктах: x вправо, y вниз.
2animations?BarChartAnimation[]Анимация изменения свойства. duration/delay в секундах; from/to — границы; repeat/autoreverse — повторы, wrap — период.
[{property: "opacity", duration: 0.25, curve: "easeInOut"}]key?string | numberСтабильный идентификатор среди соседних элементов.
Практический пример
function main() {
return (
<BarChart
width={260}
height={160}
axis="horizontal"
rangeY={[-50, 100]}
data={[
{ value: 80, label: 'A' },
{ value: -25, label: 'B' },
{ value: 45, label: 'C' },
]}
showLabels={true}
showValueLabels={true}
background={$env.accent}
cornerRadius={4}
xAxis={{ stroke: $env.foreground, dash: [4, 3] }}
yAxis={{ stroke: 'clear' }}
/>
);
}
Анимация
widthheightxyopacitybackgroundcornerRadiusblurshadowColorshadowOpacityshadowRadiusshadowXshadowYbarThicknessstrokelineWidthdashPhasetransform.translateXtransform.translateYtransform.scaleXtransform.scaleYtransform.rotationtransform.skewXtransform.skewYtransform.anchorXtransform.anchorYrangeY.0rangeY.1xAxis.lineWidthxAxis.dashPhaseyAxis.lineWidthyAxis.dashPhasexAxis.strokeyAxis.strokeПри пропуске
Таблица описывает проверенное поведение без свойства. Примеры не являются значениями по умолчанию. Фиксированный результат требует явных значений; размеры и цвета темы зависят от контекста.
| Свойства | При пропуске |
|---|---|
data | [] |
axis | "vertical" |
showLabels | true |
showValueLabels | true |
cornerRadius | 0 |
strokePosition | "inside" |
background | HDR($env.dark ? 'white' : 'black') |
xAxis | { stroke: HDR($env.foreground), lineWidth: 1 } |
yAxis | { stroke: HDR($env.foreground), lineWidth: 1 } |