开发预览 更新于 2026-05-10

RadarChart 雷达图

多维度对比的多边形图,支持多 series。

基础用法

数据通过 props 传入,纯 SVG 渲染,无第三方图表库依赖。 配色取自 --viz-1..8 token,色盲友好。

背景 视口
src/App.vue
<script setup lang="ts">
import { CfRadarChart } from '@chufix-design/vue';
const axes = ['速度', '稳定性', '兼容', '生态', '文档', '社区'];
const series = [
  { name: 'A 方案', values: [85, 70, 92, 78, 65, 80] },
  { name: 'B 方案', values: [70, 88, 75, 90, 82, 75] },
];
</script>
<template>
  <CfRadarChart :axes="axes" :series="series" />
</template>
<script setup>
import { CfRadarChart } from '@chufix-design/vue';
const axes = ['速度', '稳定性', '兼容', '生态', '文档', '社区'];
const series = [
  { name: 'A 方案', values: [85, 70, 92, 78, 65, 80] },
  { name: 'B 方案', values: [70, 88, 75, 90, 82, 75] },
];
</script>
<template>
  <CfRadarChart :axes="axes" :series="series" />
</template>
import { CfRadarChart } from '@chufix-design/react';

export default function Demo() {
  const axes = ['速度', '稳定性', '兼容', '生态', '文档', '社区'];
  const series = [
    { name: 'A 方案', values: [85, 70, 92, 78, 65, 80] },
    { name: 'B 方案', values: [70, 88, 75, 90, 82, 75] },
  ];
  return (
    <>
      <CfRadarChart axes={axes} series={series} />
    </>
  );
}
import { CfRadarChart } from '@chufix-design/react';

export default function Demo() {
  const axes = ['速度', '稳定性', '兼容', '生态', '文档', '社区'];
  const series = [
    { name: 'A 方案', values: [85, 70, 92, 78, 65, 80] },
    { name: 'B 方案', values: [70, 88, 75, 90, 82, 75] },
  ];
  return (
    <>
      <CfRadarChart axes={axes} series={series} />
    </>
  );
}

多 series 对比

3 套方案在 6 维度上的对比,颜色循环 --viz-*

背景 视口
src/App.vue
<script setup lang="ts">
import { CfRadarChart } from '@chufix-design/vue';
const axes = ['性能', '安全', '可维护', '可扩展', '兼容性', '生态'];
const series = [
  { name: '当前架构', values: [70, 80, 65, 75, 60, 55], colorIndex: 0 },
  { name: '提议方案', values: [88, 78, 90, 92, 70, 80], colorIndex: 2 },
  { name: '保守方案', values: [60, 90, 75, 50, 95, 85], colorIndex: 1 },
];
</script>
<template>
  <CfRadarChart :axes="axes" :series="series" :size="280" />
</template>
<script setup>
import { CfRadarChart } from '@chufix-design/vue';
const axes = ['性能', '安全', '可维护', '可扩展', '兼容性', '生态'];
const series = [
  { name: '当前架构', values: [70, 80, 65, 75, 60, 55], colorIndex: 0 },
  { name: '提议方案', values: [88, 78, 90, 92, 70, 80], colorIndex: 2 },
  { name: '保守方案', values: [60, 90, 75, 50, 95, 85], colorIndex: 1 },
];
</script>
<template>
  <CfRadarChart :axes="axes" :series="series" :size="280" />
</template>
import { CfRadarChart } from '@chufix-design/react';

export default function Demo() {
  const axes = ['性能', '安全', '可维护', '可扩展', '兼容性', '生态'];
  const series = [
    { name: '当前架构', values: [70, 80, 65, 75, 60, 55], colorIndex: 0 },
    { name: '提议方案', values: [88, 78, 90, 92, 70, 80], colorIndex: 2 },
    { name: '保守方案', values: [60, 90, 75, 50, 95, 85], colorIndex: 1 },
  ];
  return (
    <>
      <CfRadarChart axes={axes} series={series} size={280} />
    </>
  );
}
import { CfRadarChart } from '@chufix-design/react';

export default function Demo() {
  const axes = ['性能', '安全', '可维护', '可扩展', '兼容性', '生态'];
  const series = [
    { name: '当前架构', values: [70, 80, 65, 75, 60, 55], colorIndex: 0 },
    { name: '提议方案', values: [88, 78, 90, 92, 70, 80], colorIndex: 2 },
    { name: '保守方案', values: [60, 90, 75, 50, 95, 85], colorIndex: 1 },
  ];
  return (
    <>
      <CfRadarChart axes={axes} series={series} size={280} />
    </>
  );
}

API

属性类型默认值说明
axesstring[]维度名
seriesRadarSeries[]{ name, values: number[], colorIndex? }[]
sizenumber240
maxnumber数据最大值标准化基准
showLegendbooleantrue显示图例
showPointsbooleantrue顶点处画 3px dot;触发 vertex-* 事件
ariaLabelstring透传给根 <svg>aria-label

Events

雷达图有三个层级的交互:整条 series(多边形) / 单顶点(series × axis 的交叉点) / 轴本身

Vue 事件React 回调载荷类型说明
item-enteronItemEnterRadarChartInteractionPayload鼠标进入某 series 多边形
item-leaveonItemLeaveRadarChartInteractionPayload鼠标离开 series
vertex-enteronVertexEnterRadarVertexInteractionPayload鼠标进入某顶点 dot(精确到 series × axis)
vertex-leaveonVertexLeaveRadarVertexInteractionPayload鼠标离开顶点
axis-enteronAxisEnterRadarAxisInteractionPayload鼠标进入轴线或轴标签
axis-leaveonAxisLeaveRadarAxisInteractionPayload鼠标离开轴线/轴标签

类型

interface RadarChartInteractionPayload {
  series: RadarSeries;
  seriesIndex: number;
  nativeEvent?: PointerEvent;
}

interface RadarVertexInteractionPayload {
  series: RadarSeries;
  seriesIndex: number;
  /** 0..axes.length-1 */
  axisIndex: number;
  axisLabel: string;
  value: number;
  nativeEvent?: PointerEvent;
}

interface RadarAxisInteractionPayload {
  axisIndex: number;
  axisLabel: string;
  /** 各 series 在该轴上的值,按 seriesIndex 排列。 */
  values: number[];
  nativeEvent?: PointerEvent;
}

反馈与讨论

RadarChart 雷达图 的讨论

0
0 / 600
正在加载评论...