Chart/chart-radial-text

PreviousNext

A chart/chart-radial-text example

Docs
shadcnblocksblock

Preview

Loading preview…
code/example/chart/chart-radial-text.tsx
"use client";

import {
  Label,
  PolarGrid,
  PolarRadiusAxis,
  RadialBar,
  RadialBarChart,
} from "recharts";

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

export const title = "A radial chart with text";

const chartData = [
  { browser: "safari", visitors: 200, fill: "var(--color-safari)" },
];

const chartConfig = {
  visitors: {
    label: "Visitors",
  },
  safari: {
    label: "Safari",
    color: "var(--chart-2)",
  },
} satisfies ChartConfig;

const ChartRadialText = () => (
  <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}
    >
      <RadialBarChart
        data={chartData}
        endAngle={250}
        innerRadius={80}
        outerRadius={110}
        startAngle={0}
      >
        <PolarGrid
          className="first:fill-muted last:fill-background"
          gridType="circle"
          polarRadius={[86, 74]}
          radialLines={false}
          stroke="none"
        />
        <RadialBar background cornerRadius={10} dataKey="visitors" />
        <PolarRadiusAxis axisLine={false} tick={false} tickLine={false}>
          <Label
            content={({ viewBox }) => {
              if (viewBox && "cx" in viewBox && "cy" in viewBox) {
                return (
                  <text
                    dominantBaseline="middle"
                    textAnchor="middle"
                    x={viewBox.cx}
                    y={viewBox.cy}
                  >
                    <tspan
                      className="fill-foreground text-4xl font-bold"
                      x={viewBox.cx}
                      y={viewBox.cy}
                    >
                      {chartData[0].visitors.toLocaleString()}
                    </tspan>
                    <tspan
                      className="fill-muted-foreground"
                      x={viewBox.cx}
                      y={(viewBox.cy || 0) + 24}
                    >
                      Visitors
                    </tspan>
                  </text>
                );
              }
            }}
          />
        </PolarRadiusAxis>
      </RadialBarChart>
    </ChartContainer>
  </div>
);

export default ChartRadialText;

Installation

npx shadcn@latest add @shadcnblocks/chart-chart-radial-text

Usage

import { ChartChartRadialText } from "@/components/chart-chart-radial-text"
<ChartChartRadialText />