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 には Polyline の点数と closed、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レイアウトを変えず全体を変形。移動はポイント、回転・傾きは度、倍率 1 は等倍、基点は 0–1。
{rotation: 0}opacity?numberView 全体の不透明度。0 は透明、1 は不透明。
1clipped?booleanView の境界からはみ出す描画を切り抜きます。
falseclip?"rectangle" | "ellipse"切り抜き形状は rectangle または ellipse。Material は false で無効化も可能。
"rectangle"mask?View | nullアルファマスク用の View。レイアウトに影響せず中央に配置されます。null でマスクを無効にします。
<Circle width="fill" height="fill" background="white"/>zIndex?number兄弟 View の重なり順。大きい値ほど手前。
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 } |