# Chart Examples

> Bar, line, scatter, candlestick, donut, and pie chart examples.

A shadcn/ui block from the [@amarjay-ui](https://ui.amarjay.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/amarjay-ui/chart-examples).

- Page, with a live preview: https://shadcn.exchange/r/amarjay-ui/chart-examples
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/amarjay-ui/chart-examples-light-46e319e547d530d5.png
- Registry item: https://ui.amarjay.com/r/chart-examples.json
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://ui.amarjay.com/r/chart-examples.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- npm packages: `recharts`
- Registry items: `chart`

## Files

### `src/components/examples/charts.tsx`

```tsx
import {
  Bar,
  BarChart,
  CartesianGrid,
  Line,
  LineChart,
  Pie,
  PieChart,
  Scatter,
  ScatterChart,
  XAxis,
  YAxis,
} from "recharts"

import {
  ChartContainer,
  ChartTooltip,
  ChartTooltipContent,
  type ChartConfig,
} from "@/components/ui/chart"

const performanceData = [
  { month: "Jan", revenue: 186, expenses: 82 },
  { month: "Feb", revenue: 305, expenses: 148 },
  { month: "Mar", revenue: 237, expenses: 120 },
  { month: "Apr", revenue: 273, expenses: 154 },
  { month: "May", revenue: 209, expenses: 103 },
  { month: "Jun", revenue: 314, expenses: 165 },
]

const performanceConfig = {
  revenue: { label: "Revenue", color: "var(--chart-1)" },
  expenses: { label: "Expenses", color: "var(--chart-3)" },
} satisfies ChartConfig

const channelData = [
  { channel: "Organic", visitors: 420, fill: "var(--chart-1)" },
  { channel: "Referral", visitors: 280, fill: "var(--chart-2)" },
  { channel: "Social", visitors: 190, fill: "var(--chart-3)" },
  { channel: "Email", visitors: 150, fill: "var(--chart-4)" },
]

const channelConfig = {
  visitors: { label: "Visitors" },
  organic: { label: "Organic", color: "var(--chart-1)" },
  referral: { label: "Referral", color: "var(--chart-2)" },
  social: { label: "Social", color: "var(--chart-3)" },
  email: { label: "Email", color: "var(--chart-4)" },
} satisfies ChartConfig

const pointData = [
  { day: 1, score: 38 },
  { day: 2, score: 52 },
  { day: 3, score: 44 },
  { day: 4, score: 68 },
  { day: 5, score: 61 },
  { day: 6, score: 79 },
  { day: 7, score: 74 },
  { day: 8, score: 91 },
  { day: 9, score: 83 },
]

const pointConfig = {
  score: { label: "Focus score", color: "var(--chart-5)" },
} satisfies ChartConfig

const candleData = [
  { day: "Mon", range: [92, 108], direction: "up" },
  { day: "Tue", range: [101, 95], direction: "down" },
  { day: "Wed", range: [98, 116], direction: "up" },
  { day: "Thu", range: [118, 111], direction: "down" },
  { day: "Fri", range: [110, 123], direction: "up" },
  { day: "Sat", range: [121, 128], direction: "up" },
  { day: "Sun", range: [126, 119], direction: "down" },
]

const candleConfig = {
  range: { label: "Price" },
} satisfies ChartConfig

export function BarChartExample() {
  return (
    <ChartContainer config={performanceConfig} className="h-64 w-full max-w-2xl">
      <BarChart accessibilityLayer data={performanceData} margin={{ left: 4, right: 4 }}>
        <CartesianGrid vertical={false} />
        <XAxis dataKey="month" tickLine={false} tickMargin={10} axisLine={false} />
        <YAxis tickLine={false} axisLine={false} width={28} />
        <ChartTooltip content={<ChartTooltipContent indicator="dashed" />} />
        <Bar dataKey="revenue" fill="var(--color-revenue)" radius={[5, 5, 0, 0]} />
        <Bar dataKey="expenses" fill="var(--color-expenses)" radius={[5, 5, 0, 0]} />
      </BarChart>
    </ChartContainer>
  )
}

export function LineChartExample() {
  return (
    <ChartContainer config={performanceConfig} className="h-64 w-full max-w-2xl">
      <LineChart accessibilityLayer data={performanceData} margin={{ left: 4, right: 4 }}>
        <CartesianGrid vertical={false} />
        <XAxis dataKey="month" tickLine={false} tickMargin={10} axisLine={false} />
        <YAxis tickLine={false} axisLine={false} width={28} />
        <ChartTooltip content={<ChartTooltipContent indicator="dashed" />} />
        <Line dataKey="revenue" type="linear" stroke="var(--color-revenue)" strokeWidth={2.5} dot={{ r: 4, fill: "var(--background)", strokeWidth: 2.5 }} />
        <Line dataKey="expenses" type="linear" stroke="var(--color-expenses)" strokeWidth={2.5} strokeDasharray="5 5" dot={{ r: 3, fill: "var(--background)", strokeWidth: 2 }} />
      </LineChart>
    </ChartContainer>
  )
}

export function DotChartExample() {
  return (
    <ChartContainer config={pointConfig} className="h-64 w-full max-w-2xl">
      <ScatterChart accessibilityLayer margin={{ left: 4, right: 12, top: 12, bottom: 4 }}>
        <CartesianGrid vertical={false} />
        <XAxis dataKey="day" type="number" name="Day" tickLine={false} axisLine={false} tickMargin={10} />
        <YAxis dataKey="score" type="number" name="Score" domain={[20, 100]} tickLine={false} axisLine={false} width={28} />
        <ChartTooltip cursor={{ strokeDasharray: "4 4" }} content={<ChartTooltipContent indicator="dot" />} />
        <Scatter data={pointData} fill="var(--color-score)" />
      </ScatterChart>
    </ChartContainer>
  )
}

export function CandlestickChartExample() {
  return (
    <ChartContainer config={candleConfig} className="h-64 w-full max-w-2xl">
      <BarChart accessibilityLayer data={candleData} margin={{ left: 4, right: 4 }}>
        <CartesianGrid vertical={false} />
        <XAxis dataKey="day" tickLine={false} axisLine={false} tickMargin={10} />
        <YAxis domain={[80, 140]} tickLine={false} axisLine={false} width={28} />
        <ChartTooltip content={<ChartTooltipContent labelFormatter={(label) => `${label} trading`} />} />
        <Bar dataKey="range" shape={<Candlestick />} />
      </BarChart>
    </ChartContainer>
  )
}

function Candlestick({ height, payload, width, x, y }: any) {
  const isUp = payload.direction === "up"
  const color = isUp ? "var(--chart-2)" : "var(--chart-5)"
  const bodyHeight = Math.max(height, 4)
  const center = x + width / 2

  return (
    <g>
      <line x1={center} x2={center} y1={y - 10} y2={y + bodyHeight + 10} stroke={color} strokeWidth={1.5} />
      <rect x={x + 3} y={y} width={Math.max(width - 6, 3)} height={bodyHeight} rx={2} fill={color} />
    </g>
  )
}

export function DonutChartExample() {
  return (
    <ChartContainer config={channelConfig} className="h-64 w-full max-w-md">
      <PieChart>
        <ChartTooltip content={<ChartTooltipContent nameKey="channel" hideLabel />} />
        <Pie
          data={channelData}
          dataKey="visitors"
          nameKey="channel"
          innerRadius={58}
          outerRadius={94}
          paddingAngle={3}
          cornerRadius={5}
        />
      </PieChart>
    </ChartContainer>
  )
}

export function PieChartExample() {
  return (
    <ChartContainer config={channelConfig} className="h-64 w-full max-w-md">
      <PieChart>
        <ChartTooltip content={<ChartTooltipContent nameKey="channel" hideLabel />} />
        <Pie data={channelData} dataKey="visitors" nameKey="channel" outerRadius={98} paddingAngle={2} cornerRadius={3} />
      </PieChart>
    </ChartContainer>
  )
}
```
