Sawana Huang Avatar

Sawana Huang

Chart Topic

Donut Chart

Sat Mar 14 2026

用于 part-to-whole 结构表达的环形图,适合流量来源、预算分配和市场份额。

为什么它适合做专题页

donut chart 很常见,但也很容易被滥用。把它做成单独专题,反而能帮助之后每次使用时更有判断依据。

"use client";import { Pie, PieChart } from "recharts";import {  ChartContainer,  ChartLegend,  ChartLegendContent,  ChartTooltip,  ChartTooltipContent,  type ChartConfig,} from "@/components/ui/chart";const data = [  { key: "search", value: 38, fill: "var(--color-search)" },  { key: "direct", value: 24, fill: "var(--color-direct)" },  { key: "community", value: 18, fill: "var(--color-community)" },  { key: "email", value: 12, fill: "var(--color-email)" },  { key: "ads", value: 8, fill: "var(--color-ads)" },];const chartConfig = {  search: {    label: "Search",    color: "var(--new-home-accent-1)",  },  direct: {    label: "Direct",    color: "var(--new-home-accent-2)",  },  community: {    label: "Community",    color: "var(--new-home-accent-3)",  },  email: {    label: "Email",    color: "var(--new-home-accent-4)",  },  ads: {    label: "Ads",    color: "var(--new-home-accent-5)",  },} satisfies ChartConfig;export function DonutChartDemo() {  return (    <ChartContainer config={chartConfig} className="min-h-[320px] w-full">      <PieChart>        <ChartTooltip          content={<ChartTooltipContent nameKey="key" hideLabel />}        />        <ChartLegend          content={<ChartLegendContent nameKey="key" className="flex-wrap" />}        />        <Pie          data={data}          dataKey="value"          nameKey="key"          innerRadius={62}          outerRadius={104}          paddingAngle={4}          cornerRadius={10}          strokeWidth={0}        />      </PieChart>    </ChartContainer>  );}

适合什么场景

  • 只有几个主要组成部分的占比关系
  • 需要在一个紧凑空间里快速讲清结构
  • 与文案、标签或中心数字搭配使用的摘要型模块

不太适合的地方

  • 切片一多,可读性会直线下降
  • 如果用户需要精确比较比例,柱状图往往更准
  • 多个 donut 并排时,视觉噪音会上升得很快

实现要点

  1. 把切片数量控制在 3 到 5 个核心部分。
  2. 配色要有主次,不要每块都争抢注意力。
  3. 如果信息更偏“摘要”,可以在圆心补一个总数或主结论。

代码说明

这份代码适合作为“份额 / 占比”类图表的基础模板。后续你可以继续扩成 semi-donut、带中心 KPI 的营销版,或者更偏 editorial 的标注版。