Chart/chart-pie-stacked

PreviousNext

A chart/chart-pie-stacked example

Docs
shadcnblocksblock

Preview

Loading preview…
code/example/chart/chart-pie-stacked.tsx
"use client";

import { Pie, PieChart } from "recharts";

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

export const title = "A pie chart with stacked sections";

const desktopData = [
  { month: "january", desktop: 186, fill: "var(--color-january)" },
  { month: "february", desktop: 305, fill: "var(--color-february)" },
  { month: "march", desktop: 237, fill: "var(--color-march)" },
  { month: "april", desktop: 173, fill: "var(--color-april)" },
  { month: "may", desktop: 209, fill: "var(--color-may)" },
];

const mobileData = [
  { month: "january", mobile: 80, fill: "var(--color-january)" },
  { month: "february", mobile: 200, fill: "var(--color-february)" },
  { month: "march", mobile: 120, fill: "var(--color-march)" },
  { month: "april", mobile: 190, fill: "var(--color-april)" },
  { month: "may", mobile: 130, fill: "var(--color-may)" },
];

const chartConfig = {
  visitors: {
    label: "Visitors",
  },
  desktop: {
    label: "Desktop",
  },
  mobile: {
    label: "Mobile",
  },
  january: {
    label: "January",
    color: "var(--chart-1)",
  },
  february: {
    label: "February",
    color: "var(--chart-2)",
  },
  march: {
    label: "March",
    color: "var(--chart-3)",
  },
  april: {
    label: "April",
    color: "var(--chart-4)",
  },
  may: {
    label: "May",
    color: "var(--chart-5)",
  },
} satisfies ChartConfig;

const ChartPieStacked = () => (
  <div className="w-full max-w-xl rounded-md border bg-background p-4">
    <ChartContainer
      className="mx-auto aspect-square max-h-[250px]"
      config={chartConfig}
    >
      <PieChart>
        <ChartTooltip
          content={
            <ChartTooltipContent
              indicator="line"
              labelFormatter={(_, payload) =>
                chartConfig[payload?.[0].dataKey as keyof typeof chartConfig]
                  .label
              }
              labelKey="visitors"
              nameKey="month"
            />
          }
        />
        <Pie data={desktopData} dataKey="desktop" outerRadius={60} />
        <Pie
          data={mobileData}
          dataKey="mobile"
          innerRadius={70}
          outerRadius={90}
        />
      </PieChart>
    </ChartContainer>
  </div>
);

export default ChartPieStacked;

Installation

npx shadcn@latest add @shadcnblocks/chart-chart-pie-stacked

Usage

import { ChartChartPieStacked } from "@/components/chart-chart-pie-stacked"
<ChartChartPieStacked />