BarChart
Plot setiap item data sebagai batang, cocok untuk membandingkan nilai kategorikal. Itu dapat diatur secara horizontal atau vertikal, mengatur rentang numerik, label kategori dan label numerik, dan mendukung nilai positif dan negatif.
Contoh
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 }}
/>
);
}
Penggunaan
- Setiap data satu batang, urutan array menentukan kategori, tanpa x. horizontal tetap memakai rangeY untuk nilai. Rentang otomatis mencakup nol, negatif melewati dasar, background mengisi batang.
- rangeX/rangeY membatasi angka, bukan label. Menyembunyikan label tidak menyembunyikan sumbu; gunakan stroke="clear". Layout memilih label tanpa tumpang tindih, tidak menjamin semuanya tampil.
- contentAnimation mengubah teks, gambar atau struktur data. interpolate perlu jumlah titik/closed Polyline, urutan Path atau struktur grafik yang cocok. Perubahan struktur diterapkan langsung.
Properti
dataReadonlyArray<BarChartDataPoint>Kategori sesuai urutan array. Setiap item memiliki nilai angka dan label opsional.
[{value: 10, label: "A"}, {value: 20, label: "B"}, {value: 30, label: "C"}]axis?"horizontal" | "vertical"Arah batang: vertical dari kiri ke kanan; horizontal dari atas ke bawah.
"vertical"rangeY?ChartRangeRentang nilai terlihat [min, max]. Jika dihilangkan, menyesuaikan data dan menyertakan nol.
[0, 100]showLabels?booleanTampilkan label kategori. Label yang tidak ada tetap kosong; tata letak native mencegah tumpang tindih.
trueshowValueLabels?booleanTampilkan label sumbu angka yang dibuat otomatis.
truebarThickness?number | "auto"Ketebalan batang dalam poin, atau auto mengikuti jarak kategori.
"auto"xAxis?ChartAxisStyleGaris sumbu horizontal di bawah grafik. Defaultnya warna latar depan selebar 1pt; gunakan stroke: clear untuk menyembunyikannya.
{stroke: HDR($env.foreground), lineWidth: 1}yAxis?ChartAxisStyleGaris sumbu vertikal di kiri grafik. Defaultnya warna latar depan selebar 1pt; gunakan stroke: clear untuk menyembunyikannya.
{stroke: HDR($env.foreground), lineWidth: 1}background?PaintIsian setiap batang. Defaultnya warna latar depan tema.
HDR($env.dark ? "white" : "black")cornerRadius?numberRadius sudut tiap batang, dibatasi sesuai ukurannya.
0stroke?PaintWarna atau gradasi garis; clear menyembunyikannya.
"clear"lineWidth?numberKetebalan garis dalam poin; 0 tidak menggambar garis.
2strokePosition?"inside" | "center" | "outside"Posisi garis tepi terhadap setiap batang. Defaultnya inside.
"inside"dash?number[]Panjang garis dan celah bergantian dalam poin; larik kosong membuat garis utuh.
[]dashPhase?numberOffset pola putus-putus dalam poin.
0contentAnimation?ContentAnimationTransisi konten opsional. interpolate memerlukan jumlah kategori dan arah yang sama; jika berbeda, langsung diperbarui.
{type: "interpolate", duration: 0.25}Properti umum
width?number | "auto" | "fill"Lebar dalam poin, ukuran otomatis, atau memenuhi induk.
"fill"height?number | "auto" | "fill"Tinggi dalam poin, ukuran otomatis, atau memenuhi induk.
"fill"x?numberOffset visual dalam poin: x ke kanan, y ke bawah; ruang tata letak tidak berubah.
0y?numberOffset visual dalam poin: x ke kanan, y ke bawah; ruang tata letak tidak berubah.
0transform?ViewTransformTransformasi seluruh View tanpa mengubah tata letak. Translasi dalam poin, rotasi/kemiringan dalam derajat, skala 1 tetap, jangkar 0–1.
{rotation: 0}opacity?numberOpasitas seluruh View: 0 transparan, 1 buram.
1clipped?booleanPotong gambar yang melewati batas View.
falseclip?"rectangle" | "ellipse"Bentuk potongan rectangle atau ellipse; Material juga menerima false untuk mematikan.
"rectangle"mask?View | nullView masker alfa. Di tengah tanpa memengaruhi tata letak; null menonaktifkan masker.
<Circle width="fill" height="fill" background="white"/>zIndex?numberUrutan gambar antar saudara; nilai lebih besar di depan.
0blur?numberRadius buram dalam poin; 0 menonaktifkan.
4innerShadow?DrawingEffectWarna, opasitas, radius buram dan offset x/y efek; jarak dalam poin.
{color: HDR("black"), opacity: 0.5, radius: 4, x: 0, y: 2}glow?DrawingEffectWarna, opasitas, radius buram dan offset x/y efek; jarak dalam poin.
{color: HDR("cyan"), radius: 8, opacity: 0.8}shadowColor?ColorWarna bayangan luar.
HDR("black")shadowOpacity?numberOpasitas bayangan 0–1; 0 menyembunyikannya.
0shadowRadius?numberRadius buram bayangan luar dalam poin.
4shadowX?numberOffset bayangan dalam poin: x ke kanan, y ke bawah.
0shadowY?numberOffset bayangan dalam poin: x ke kanan, y ke bawah.
2animations?BarChartAnimation[]Animasi perubahan properti. duration/delay dalam detik; from/to adalah ujung; repeat/autoreverse untuk pengulangan, wrap untuk periode.
[{property: "opacity", duration: 0.25, curve: "easeInOut"}]key?string | numberIdentitas stabil di antara elemen sejajar.
Contoh praktis
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' }}
/>
);
}
Animasi
widthheightxyopacitybackgroundcornerRadiusblurshadowColorshadowOpacityshadowRadiusshadowXshadowYbarThicknessstrokelineWidthdashPhasetransform.translateXtransform.translateYtransform.scaleXtransform.scaleYtransform.rotationtransform.skewXtransform.skewYtransform.anchorXtransform.anchorYrangeY.0rangeY.1xAxis.lineWidthxAxis.dashPhaseyAxis.lineWidthyAxis.dashPhasexAxis.strokeyAxis.strokeJika dihilangkan
Tabel menunjukkan perilaku penghilangan yang diverifikasi dari implementasi; contoh bukan default. Untuk hasil tetap beri nilai eksplisit; ukuran dan warna kontekstual bukan konstanta.
| Properti | Jika dihilangkan |
|---|---|
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 } |