- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Attachment
- Avatar
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Carousel
- Chart
- Checkbox
- Collapsible
- Combobox
- Command
- Context Menu
- Data Table
- Date Picker
- Dialog
- Direction
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Input OTP
- Item
- Kbd
- Label
- Marker
- Message
- Message Scroller
- Native Select
- Pagination
- Popover
- Progress
- Questionnaire
- Radio Group
- Resizable
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
- Typography
注: Recharts v3 へのアップグレードに取り組んでいます。それまでの間、v3 のテストを開始したい場合は、ここ のコメント内のコードを参照してください。近々正式リリースを予定しております。
"use client"
import * as React from "react"チャートを紹介します。コピーしてアプリに貼り付けることができるグラフ コンポーネントのコレクション。
チャートは、箱から出してすぐに見栄えがするように設計されています。これらは他のコンポーネントとうまく連携し、プロジェクトに合わせて完全にカスタマイズできます。
コンポーネント#
内部では Recharts を使用しています。
chart コンポーネントは、構成を念頭に置いて設計されました。 Recharts コンポーネントを使用してグラフを作成し、ChartTooltip などのカスタム コンポーネントを必要なときに必要な場所にのみ取り込みます。
import { Bar, BarChart } from "recharts"
import { ChartContainer, ChartTooltipContent } from "@/components/ui/chart"
export function MyChart() {
return (
<ChartContainer>
<BarChart data={data}>
<Bar dataKey="value" />
<ChartTooltip content={<ChartTooltipContent />} />
</BarChart>
</ChartContainer>
)
}Recharts はラップしません。これは、抽象概念に囚われないことを意味します。 Recharts の新しいバージョンがリリースされたら、公式アップグレード パスに従ってチャートをアップグレードできます。
コンポーネントはあなたのものです。
インストール#
pnpm dlx shadcn@latest add chart
初めてのチャート#
最初のチャートを作成しましょう。バーチャートを作成し、グリッド、軸、ツールチップ、凡例を追加します。
データを定義することから始めます
次のデータは、各月のデスクトップ ユーザーとモバイル ユーザーの数を表します。
注: データは任意の形式にすることができます。以下のデータの形式に限定されません。 dataKey プロパティを使用して、データをチャートにマップします。
const chartData = [
{ month: "January", desktop: 186, mobile: 80 },
{ month: "February", desktop: 305, mobile: 200 },
{ month: "March", desktop: 237, mobile: 120 },
{ month: "April", desktop: 73, mobile: 190 },
{ month: "May", desktop: 209, mobile: 130 },
{ month: "June", desktop: 214, mobile: 140 },
]チャート構成を定義します
チャート設定はチャートの設定を保持します。ここに、ラベル、アイコン、テーマ用のカラートークンなど、人間が判読できる文字列を配置します。
import { type ChartConfig } from "@/components/ui/chart"
const chartConfig = {
desktop: {
label: "Desktop",
color: "#2563eb",
},
mobile: {
label: "Mobile",
color: "#60a5fa",
},
} satisfies ChartConfigチャートを作成します
これで、Recharts コンポーネントを使用してチャートを作成できるようになりました。
重要: ChartContainer コンポーネントに min-h-[VALUE] を設定することを忘れないでください。これはチャートの応答性を高めるために必要です。
"use client"
import { Bar, BarChart } from "recharts"グリッドの追加#
Let's add a grid to the chart.
CartesianGrid コンポーネントをインポートします。
import { Bar, BarChart, CartesianGrid } from "recharts"CartesianGrid コンポーネントをチャートに追加します。
<ChartContainer config={chartConfig} className="min-h-[200px] w-full">
<BarChart accessibilityLayer data={chartData}>
<CartesianGrid vertical={false} />
<Bar dataKey="desktop" fill="var(--color-desktop)" radius={4} />
<Bar dataKey="mobile" fill="var(--color-mobile)" radius={4} />
</BarChart>
</ChartContainer>"use client"
import { Bar, BarChart, CartesianGrid } from "recharts"軸の追加#
グラフに X 軸を追加するには、XAxis コンポーネントを使用します。
XAxis コンポーネントをインポートします。
import { Bar, BarChart, CartesianGrid, XAxis } from "recharts"XAxis コンポーネントをチャートに追加します。
<ChartContainer config={chartConfig} className="h-[200px] w-full">
<BarChart accessibilityLayer data={chartData}>
<CartesianGrid vertical={false} />
<XAxis
dataKey="month"
tickLine={false}
tickMargin={10}
axisLine={false}
tickFormatter={(value) => value.slice(0, 3)}
/>
<Bar dataKey="desktop" fill="var(--color-desktop)" radius={4} />
<Bar dataKey="mobile" fill="var(--color-mobile)" radius={4} />
</BarChart>
</ChartContainer>"use client"
import { Bar, BarChart, CartesianGrid, XAxis } from "recharts"ツールチップの追加#
これまで、Recharts のコンポーネントのみを使用してきました。 chart コンポーネントのカスタマイズのおかげで、箱から出してすぐに見栄えがよくなります。
ツールチップを追加するには、chart のカスタム ChartTooltip コンポーネントと ChartTooltipContent コンポーネントを使用します。
ChartTooltip および ChartTooltipContent コンポーネントをインポートします。
import { ChartTooltip, ChartTooltipContent } from "@/components/ui/chart"コンポーネントをチャートに追加します。
<ChartContainer config={chartConfig} className="h-[200px] w-full">
<BarChart accessibilityLayer data={chartData}>
<CartesianGrid vertical={false} />
<XAxis
dataKey="month"
tickLine={false}
tickMargin={10}
axisLine={false}
tickFormatter={(value) => value.slice(0, 3)}
/>
<ChartTooltip content={<ChartTooltipContent />} />
<Bar dataKey="desktop" fill="var(--color-desktop)" radius={4} />
<Bar dataKey="mobile" fill="var(--color-mobile)" radius={4} />
</BarChart>
</ChartContainer>"use client"
import { Bar, BarChart, CartesianGrid, XAxis } from "recharts"カーソルを合わせるとツールチップが表示されます。簡単ですよね? 2 つのコンポーネントで、美しいツールチップが表示されます。
凡例の追加#
凡例に対しても同じことを行います。 chart の ChartLegend コンポーネントと ChartLegendContent コンポーネントを使用します。
ChartLegend および ChartLegendContent コンポーネントをインポートします。
import { ChartLegend, ChartLegendContent } from "@/components/ui/chart"コンポーネントをチャートに追加します。
<ChartContainer config={chartConfig} className="h-[200px] w-full">
<BarChart accessibilityLayer data={chartData}>
<CartesianGrid vertical={false} />
<XAxis
dataKey="month"
tickLine={false}
tickMargin={10}
axisLine={false}
tickFormatter={(value) => value.slice(0, 3)}
/>
<ChartTooltip content={<ChartTooltipContent />} />
<ChartLegend content={<ChartLegendContent />} />
<Bar dataKey="desktop" fill="var(--color-desktop)" radius={4} />
<Bar dataKey="mobile" fill="var(--color-mobile)" radius={4} />
</BarChart>
</ChartContainer>"use client"
import { Bar, BarChart, CartesianGrid, XAxis } from "recharts"完了しました。最初のチャートが作成されました。次は何でしょうか?
チャート設定#
チャート設定では、チャートのラベル、アイコン、色を定義します。
チャート データから意図的に切り離されています。
これにより、チャート間で構成トークンとカラートークンを共有できるようになります。データまたはカラー トークンがリモートに存在する場合や、異なる形式で存在する場合でも、独立して機能することもできます。
import { Monitor } from "lucide-react"
import { type ChartConfig } from "@/components/ui/chart"
const chartConfig = {
desktop: {
label: "Desktop",
icon: Monitor,
// A color like 'hsl(220, 98%, 61%)' or 'var(--color-name)'
color: "#2563eb",
// OR a theme object with 'light' and 'dark' keys
theme: {
light: "#2563eb",
dark: "#dc2626",
},
},
} satisfies ChartConfigテーマ#
チャートにはテーマのサポートが組み込まれています。 CSS 変数 (推奨) または任意のカラー形式 (hex、hsl、oklch など) のカラー値を使用できます。
CSS 変数#
CSS ファイルで色を定義します
@layer base {
:root {
--chart-1: oklch(0.646 0.222 41.116);
--chart-2: oklch(0.6 0.118 184.704);
}
.dark: {
--chart-1: oklch(0.488 0.243 264.376);
--chart-2: oklch(0.696 0.17 162.48);
}
}chartConfig に色を追加します
const chartConfig = {
desktop: {
label: "Desktop",
color: "var(--chart-1)",
},
mobile: {
label: "Mobile",
color: "var(--chart-2)",
},
} satisfies ChartConfighex、hsl、または oklch#
チャート設定で直接色を定義することもできます。好みのカラー形式を使用してください。
const chartConfig = {
desktop: {
label: "Desktop",
color: "#2563eb",
},
mobile: {
label: "Mobile",
color: "hsl(220, 98%, 61%)",
},
tablet: {
label: "Tablet",
color: "oklch(0.5 0.2 240)",
},
laptop: {
label: "Laptop",
color: "var(--chart-2)",
},
} satisfies ChartConfig色の使用#
チャートでテーマの色を使用するには、var(--color-KEY) の形式を使用して色を参照します。
コンポーネント#
<Bar dataKey="desktop" fill="var(--color-desktop)" />チャート データ#
const chartData = [
{ browser: "chrome", visitors: 275, fill: "var(--color-chrome)" },
{ browser: "safari", visitors: 200, fill: "var(--color-safari)" },
]Tailwind#
<LabelList className="fill-[--color-desktop]" />ツールチップ#
チャート ツールチップには、ラベル、名前、インジケーター、および値が含まれます。これらを組み合わせて使用して、ツールチップをカスタマイズできます。
hideLabel、hideIndicator プロパティを使用してこれらのオン/オフを切り替え、indicator プロパティを使用してインジケーターのスタイルをカスタマイズできます。
ツールチップのラベルと名前にカスタム キーを使用するには、labelKey および nameKey を使用します。
チャートには、<ChartTooltip> コンポーネントと <ChartTooltipContent> コンポーネントが付属しています。これら 2 つのコンポーネントを使用して、グラフにカスタム ツールチップを追加できます。
import { ChartTooltip, ChartTooltipContent } from "@/components/ui/chart"<ChartTooltip content={<ChartTooltipContent />} />プロパティ#
ツールチップをカスタマイズするには、次のプロパティを使用します。
| プロパティ | タイプ | 説明 |
|---|---|---|
labelKey | 文字列 | ラベルに使用する構成キーまたはデータキー。 |
nameKey | 文字列 | 名前に使用する構成キーまたはデータキー。 |
indicator | dot、line、または dashed | ツールチップのインジケーターのスタイル。 |
hideLabel | ブール値 | ラベルを非表示にするかどうか。 |
hideIndicator | ブール値 | インジケーターを非表示にするかどうか。 |
カラー#
色はチャート設定から自動的に参照されます。
カスタム#
ツールチップのラベルと名前にカスタム キーを使用するには、labelKey および nameKey プロパティを使用します。
const chartData = [
{ browser: "chrome", visitors: 187, fill: "var(--color-chrome)" },
{ browser: "safari", visitors: 200, fill: "var(--color-safari)" },
]
const chartConfig = {
visitors: {
label: "Total Visitors",
},
chrome: {
label: "Chrome",
color: "var(--chart-1)",
},
safari: {
label: "Safari",
color: "var(--chart-2)",
},
} satisfies ChartConfig<ChartTooltip
content={<ChartTooltipContent labelKey="visitors" nameKey="browser" />}
/>これにより、ラベルに Total Visitors が使用され、ツールチップ名に Chrome と Safari が使用されます。
凡例#
カスタム <ChartLegend> および <ChartLegendContent> コンポーネントを使用して、グラフに凡例を追加できます。
import { ChartLegend, ChartLegendContent } from "@/components/ui/chart"<ChartLegend content={<ChartLegendContent />} />カラー#
色はチャート設定から自動的に参照されます。
カスタム#
凡例名にカスタム キーを使用するには、nameKey プロパティを使用します。
const chartData = [
{ browser: "chrome", visitors: 187, fill: "var(--color-chrome)" },
{ browser: "safari", visitors: 200, fill: "var(--color-safari)" },
]
const chartConfig = {
chrome: {
label: "Chrome",
color: "var(--chart-1)",
},
safari: {
label: "Safari",
color: "var(--chart-2)",
},
} satisfies ChartConfig<ChartLegend content={<ChartLegendContent nameKey="browser" />} />これにより、凡例名に Chrome と Safari が使用されます。
アクセシビリティ#
accessibilityLayer プロパティをオンにして、アクセス可能なレイヤーをチャートに追加できます。
このプロパティは、チャートにキーボード アクセスとスクリーン リーダーのサポートを追加します。
<LineChart accessibilityLayer />RTL#
shadcn/ui で RTL サポートを有効にするには、RTL 構成ガイド を参照してください。
"use client"
import { Bar, BarChart, CartesianGrid, XAxis } from "recharts"