Chart
テーマ対応の色を持つRechartsのチャートです。1つの設定からラベルを読み取るツールチップと凡例、見えるフォーカスリングつきのキーボード操作に対応します。
pnpm dlx shadcn@latest add https://hextaui.com/r/chart.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add recharts cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/chart.tsx インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
チャートは Recharts のコンポーネントで作り、必要な場所にだけ chart のパーツを追加します。Recharts はラップされていないため、Recharts 自身のドキュメントとアップグレードガイドがそのまま当てはまります。
ChartConfig は、各データキーをラベル、任意のアイコン、色に対応付けます。データとは別になっているため、1 つの設定を複数のチャートで使えます。
最初のレンダリングでチャートが自分のサイズを測れるよう、<ChartContainer /> に高さ、min-h-*、aspect-* のいずれかを指定してください。指定がない場合は aspect-video にフォールバックします。
各設定キーは、そのチャートにスコープされた --color-KEY 変数になります。テーマトークン、任意の CSS カラーを指定するか、light と dark の別々の値を指定します。
Recharts が色を受け付ける場所なら、コンポーネント、データ、Tailwind のクラスなど、どこでもこの変数を使えます。
テーマには、青、ティール、アンバー、バイオレット、ローズの 5 つのチャートトークン --chart-1 から --chart-5 が含まれます。この順序なら、隣り合う色は一般的な色覚特性でも区別でき、それぞれがライトとダークの背景に対して 3:1 以上のコントラストを持ちます。順番どおりに使い、凡例やラベルを表示したままにして、色だけが手がかりにならないようにしてください。
Mobile users のように CSS の名前として無効なキーは、--color-Mobile-users になります。
棒グラフ
グリッド、軸、<ChartTooltip />、<ChartLegend />。ツールチップと凡例は、設定からラベルと色を読み取ります。
折れ線グラフ
indicator="line" は、ツールチップのキーを、それが説明する線に合わせます。
積み上げ棒
同じ stackId を持つ棒は積み重なります。スタックが 1 本の棒に見えるよう、外側の端だけを丸めます。
横向きの棒
チャートに layout="vertical" を設定し、軸の種類を入れ替えます。<LabelList /> は各値を棒の端に表示します。
ドーナツ
各スライスは、データの fill から色を取得します。ツールチップと凡例の nameKey は、設定から各スライスのラベルを探します。
レーダー
極座標のグリッドと軸にも、直交座標のものと同じ控えめな線とラベルが適用されます。
Tooltip
インジケーターは dot、line、dashed から選べ、hideLabel でラベルを非表示にできます。<ChartTooltip /> の defaultIndex は、最初のレンダリング時にポイントを表示します。
値の整形
valueFormatter は数値を整形し、インジケーターと名前は維持します。labelFormatter はラベルに対して同じことを行います。行全体を置き換えるには formatter を使います。
アイコン
設定内の icon は、ツールチップと凡例の色キーを置き換えます。
ライトとダークの色
theme オブジェクトを使うと、テーマごとに異なる色を選べます。サイトのテーマを切り替えると変化を確認できます。
負の値
<Cell /> で各棒に色を付け、<ReferenceLine /> でゼロを示します。
長いラベル
長い系列名は凡例とツールチップ内で折り返され、大きな値はその隣で 1 行にとどまります。
右から左
Recharts は軸を自動で反転しません。x 軸に reversed を設定し、y 軸を右側に移動してください。読み手の数字で表示するには、ツールチップに locale を渡します。
Recharts はデフォルトで accessibilityLayer をオンにするため、チャートは 1 つのタブストップとなり、ポイントごとに移動できます。
| キー | アクション |
|---|---|
| Tab | チャートにフォーカスし、フォーカスリングを表示します。 |
| ←→ | ツールチップを次または前のポイントに移動します。軸が反転している場合、キーは画面上の向きに従います。 |
| Enter | 現在のポイントでツールチップを表示または非表示にします。 |
- チャートは、スクリーンリーダーには画像として扱われます。近くに表示されるタイトルか、Recharts のチャートへの
aria-labelでそれぞれに名前を付け、正確な値が必要な場合は表も用意してください。 - ツールチップと凡例はすべての系列をテキストで名指しするため、読み手が色だけを頼りに対応付ける必要はありません。
- モーションの低減が有効な場合、Recharts は入場アニメーションをスキップし、ツールチップはポイント間を滑らかに移動せず、直接ジャンプします。
- ツールチップの値は、
localeを渡さない限りen-USで整形されるため、サーバーとブラウザで同じテキストがレンダリングされます。
各パーツは Recharts の上に載っています。内側に置く Recharts のチャートコンポーネントでは、Recharts のすべての props が引き続き使えます。
設定を提供し、色変数を書き込み、子要素を Recharts の <ResponsiveContainer /> で包んでレンダリングします。<div> のすべての props を受け付けます。
| プロパティ | 型 | デフォルト |
|---|---|---|
config各データキーのラベル、アイコン、色。 | ChartConfig | – |
children<BarChart /> などの Recharts のチャート 1 つ。 | ReactElement | – |
initialDimensionコンテナが測定される前に使われるサイズ。 | { width: number; height: number } | { width: 320, height: 200 } |
iddata-chart でチャートに名前を付けます。省略すると自動生成されます。 | string | – |
| 属性 | 説明 |
|---|---|
data-slot="chart" | コンテナ。 |
data-chart | 色変数がスコープされる id。 |
--color-KEY | 設定されたキーごとに 1 つの色変数。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
label | ReactNode | – |
iconツールチップと凡例の色キーを置き換えます。 | ComponentType | – |
color任意の CSS カラーまたは変数。 | string | – |
themeテーマごとに色を指定したい場合は、color の代わりに使います。 | { light: string; dark: string } | – |
Recharts の <Tooltip />。ポイント間の移動がより短くなっています。Recharts のツールチップのすべての props を受け付けます。
| プロパティ | 型 | デフォルト |
|---|---|---|
content通常は <ChartTooltipContent /> です。 | ReactElement | (props) => ReactNode | – |
animationDuration | number | 200 |
animationEasing | string | "ease-out" |
defaultIndex最初のレンダリング時に、このポイントでツールチップを表示します。 | number | – |
| プロパティ | 型 | デフォルト |
|---|---|---|
indicator | "dot" | "line" | "dashed" | "dot" |
hideLabel | boolean | false |
hideIndicator | boolean | false |
labelKeyラベルに使う設定キーまたはデータキー。 | string | – |
nameKey各名前に使う設定キーまたはデータキー。 | string | – |
valueFormatter各値を整形し、インジケーターと名前は維持します。 | (value, name, item) => ReactNode | – |
labelFormatter | (label, payload) => ReactNode | – |
formatter各行を置き換えます。 | (value, name, item, index, payload) => ReactNode | – |
locale数値を整形します。 | Intl.LocalesArgument | "en-US" |
colorすべての行で共通の 1 つのインジケーター色。 | string | – |
className | string | – |
labelClassName | string | – |
| 属性 | 説明 |
|---|---|
data-slot="chart-tooltip" | ボックス。 |
data-slot="chart-tooltip-label" | ラベル。 |
data-slot="chart-tooltip-item" | 系列ごとに 1 行。 |
data-slot="chart-tooltip-indicator" | 色キー。 |
data-indicator | キーに指定: dot、line、dashed。 |
--chart-indicator | キーの色。 |
Recharts の <Legend />。Recharts の凡例のすべての props を受け付け、系列を、アルファベット順ではなく宣言した順に並べます。
| プロパティ | 型 | デフォルト |
|---|---|---|
content通常は <ChartLegendContent /> です。 | ReactElement | (props) => ReactNode | – |
itemSorternull を指定すると、宣言した順序が維持されます。 | "value" | "dataKey" | (item) => number | string | null | null |
| プロパティ | 型 | デフォルト |
|---|---|---|
hideIcon | boolean | false |
nameKey各名前に使う設定キーまたはデータキー。 | string | – |
className | string | – |
| 属性 | 説明 |
|---|---|
data-slot="chart-legend" | リスト。 |
data-slot="chart-legend-item" | 系列ごとに 1 つのエントリー。 |
data-slot="chart-legend-indicator" | 色見本。 |
<ChartContainer /> の内側で { config } を返します。独自のツールチップや凡例のコンテンツを作るときに使います。
- Avatarイニシャルのフォールバック、ステータスバッジ、件数にまとめられる積み重ねグループを備えたユーザー写真です。
- Badge色付きのドットを持つステータスラベル、スライドして閉じる削除可能なタグ、新しい値へ回転するカウントです。
- Cardコンテンツをまとめるサーフェスです。3つのバリアント、端まで広がるメディア、同心円状の角丸、カード全体のリンクに対応します。
- Data table実データのためのテーブルです。並べ替え、検索、行の選択、固定列、スティッキーヘッダー、ページネーションを備えています。
- Itemリスト、設定、ピッカー向けに、メディア、テキスト、操作を並べた行です。グループ化されたサーフェスと、行の間を滑るように移動するホバーハイライトを備えています。
- Kbdショートカット用のキーキャップです。プラットフォームごとに正しい記号を表示し、正しく読み上げ、実際のキーと同じように押し込まれます。
使用しているブロック
Chart の上に構築されるブロック。
- BillingCursor、Claude、Vercelのスタイルによる、AIプロダクト向けのプランと使用量です。モデルごとに分かれ、サイクル終了時を予測してクレジット切れの前に警告する使用量メーター、ドラッグで確認できる日別チャート、メーター上でプレビューできるアラートつきの支出上限、正確な日割り計算によるプラン変更、実際のバリデーションを備えたカードフォーム、PDFでダウンロードできる請求書を備えています。
- SettingsCursorやClaudeのように構成した、AIプロダクト向けの設定です。検索、グループ、外部リンクを備えた塗りつぶしのサイドバー、控えめなピッカーと入れ子のオプションを持つ行のカード、変更があったときだけ浮かび上がる暗い保存アイランド、⌘Sでの保存、チェックやサーバーからのフィールドエラー、コンテンツの形に合わせた読み込み状態を備えています。