Preview Updated 2026-05-10

Donut chart

Hollow pie chart that can show a value or label in the center.

Basic usage

Data is passed in via props. Pure SVG rendering, no third-party chart library dependency. Colors come from the --viz-1..8 tokens and are colorblind-friendly.

背景
src/App.vue
<script setup lang="ts">
import { CfDonutChart } from '@chufix-design/vue';
const segments = [
  { name: 'Chrome', value: 65 },
  { name: 'Safari', value: 18 },
  { name: 'Firefox', value: 9 },
  { name: 'Edge', value: 5 },
  { name: 'Other', value: 3 },
];
</script>
<template>
  <CfDonutChart :segments="segments" :size="200" :thickness="28" center-value="100%" center-label="访问占比" />
</template>
<script setup>
import { CfDonutChart } from '@chufix-design/vue';
const segments = [
  { name: 'Chrome', value: 65 },
  { name: 'Safari', value: 18 },
  { name: 'Firefox', value: 9 },
  { name: 'Edge', value: 5 },
  { name: 'Other', value: 3 },
];
</script>
<template>
  <CfDonutChart :segments="segments" :size="200" :thickness="28" center-value="100%" center-label="访问占比" />
</template>
import { CfDonutChart } from '@chufix-design/react';

export default function Demo() {
  return (
    <>
      <CfDonutChart ... />
    </>
  );
}

Different ring thicknesses

thickness controls the ring thickness (with the same size, thicker is more pie-like, thinner is more ring-like).

背景
src/App.vue
<script setup lang="ts">
import { CfDonutChart } from '@chufix-design/vue';
const segments = [
  { name: '已完成', value: 78 },
  { name: '进行中', value: 14, colorIndex: 4 },
  { name: '未开始', value: 8, colorIndex: 5 },
];
</script>
<template>
  <div class="demo-row" style="gap: 32px; align-items: center;">
    <CfDonutChart :segments="segments" :size="160" :thickness="14" :show-legend="false" center-value="78%" center-label="完成率" />
    <CfDonutChart :segments="segments" :size="160" :thickness="22" :show-legend="false" center-value="78%" center-label="完成率" />
    <CfDonutChart :segments="segments" :size="160" :thickness="32" :show-legend="false" center-value="78%" center-label="完成率" />
  </div>
</template>
<script setup>
import { CfDonutChart } from '@chufix-design/vue';
const segments = [
  { name: '已完成', value: 78 },
  { name: '进行中', value: 14, colorIndex: 4 },
  { name: '未开始', value: 8, colorIndex: 5 },
];
</script>
<template>
  <div class="demo-row" style="gap: 32px; align-items: center;">
    <CfDonutChart :segments="segments" :size="160" :thickness="14" :show-legend="false" center-value="78%" center-label="完成率" />
    <CfDonutChart :segments="segments" :size="160" :thickness="22" :show-legend="false" center-value="78%" center-label="完成率" />
    <CfDonutChart :segments="segments" :size="160" :thickness="32" :show-legend="false" center-value="78%" center-label="完成率" />
  </div>
</template>
import { CfDonutChart } from '@chufix-design/react';

export default function Demo() {
  const segments = [
    { name: '已完成', value: 78 },
    { name: '进行中', value: 14, colorIndex: 4 },
    { name: '未开始', value: 8, colorIndex: 5 },
  ];
  return (
    <>
      <CfDonutChart segments={data} thickness={14} centerValue="78%" centerLabel="Completion" />
      <CfDonutChart segments={data} thickness={22} />
      <CfDonutChart segments={data} thickness={32} />
    </>
  );
}

API

PropTypeDefaultDescription
segmentsDonutSegment[]{ name, value, colorIndex? }[]
sizenumber180Diameter
thicknessnumber24Ring thickness
centerValue / centerLabelstring | numberCenter text
showLegendbooleantrue

反馈与讨论

Donut chart · Discussion

0
0 / 600
一键发送
正在加载评论...