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

AreaChart 面积图

面积图,支持堆叠模式与平滑曲线。

基础用法

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

背景 视口
GETPOSTPUT01632476301234567891011
src/App.vue
<script setup lang="ts">
import { CfAreaChart } from '@chufix-design/vue';
const series = [
  { name: 'GET', data: [10, 14, 12, 18, 22, 20, 26, 32, 28, 35, 30, 40] },
  { name: 'POST', data: [3, 5, 4, 6, 8, 7, 10, 12, 11, 14, 13, 16] },
  { name: 'PUT', data: [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7] },
];
</script>
<template>
  <CfAreaChart :series="series" stacked smooth />
</template>
<script setup>
import { CfAreaChart } from '@chufix-design/vue';
const series = [
  { name: 'GET', data: [10, 14, 12, 18, 22, 20, 26, 32, 28, 35, 30, 40] },
  { name: 'POST', data: [3, 5, 4, 6, 8, 7, 10, 12, 11, 14, 13, 16] },
  { name: 'PUT', data: [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7] },
];
</script>
<template>
  <CfAreaChart :series="series" stacked smooth />
</template>
import { CfAreaChart } from '@chufix-design/react';

export default function Demo() {
  const series = [
    { name: 'GET', data: [10, 14, 12, 18, 22, 20, 26, 32, 28, 35, 30, 40] },
    { name: 'POST', data: [3, 5, 4, 6, 8, 7, 10, 12, 11, 14, 13, 16] },
    { name: 'PUT', data: [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7] },
  ];
  return (
    <>
      <CfAreaChart series={series} stacked smooth />
    </>
  );
}
import { CfAreaChart } from '@chufix-design/react';

export default function Demo() {
  const series = [
    { name: 'GET', data: [10, 14, 12, 18, 22, 20, 26, 32, 28, 35, 30, 40] },
    { name: 'POST', data: [3, 5, 4, 6, 8, 7, 10, 12, 11, 14, 13, 16] },
    { name: 'PUT', data: [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7] },
  ];
  return (
    <>
      <CfAreaChart series={series} stacked smooth />
    </>
  );
}

堆叠模式

stacked = true 把 series 累加显示(每条数据值是前面所有 series 的累加值), 适合展示组成;默认 false 重叠显示,适合比较趋势。

背景 视口
GETPOSTPUTDELETE01020304001234567891011
GETPOSTPUTDELETE01733506601234567891011
src/App.vue
<script setup lang="ts">
import { CfAreaChart } from '@chufix-design/vue';
const series = [
  { name: 'GET', data: [10, 14, 12, 18, 22, 20, 26, 32, 28, 35, 30, 40] },
  { name: 'POST', data: [3, 5, 4, 6, 8, 7, 10, 12, 11, 14, 13, 16] },
  { name: 'PUT', data: [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7] },
  { name: 'DELETE', data: [0, 1, 0, 2, 1, 1, 2, 3, 2, 3, 4, 3] },
];
</script>
<template>
  <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px;">
    <div>
      <CfAreaChart :series="series" :height="180" smooth />
    </div>
    <div>
      <CfAreaChart :series="series" :height="180" smooth stacked />
    </div>
  </div>
</template>
<script setup>
import { CfAreaChart } from '@chufix-design/vue';
const series = [
  { name: 'GET', data: [10, 14, 12, 18, 22, 20, 26, 32, 28, 35, 30, 40] },
  { name: 'POST', data: [3, 5, 4, 6, 8, 7, 10, 12, 11, 14, 13, 16] },
  { name: 'PUT', data: [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7] },
  { name: 'DELETE', data: [0, 1, 0, 2, 1, 1, 2, 3, 2, 3, 4, 3] },
];
</script>
<template>
  <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px;">
    <div>
      <CfAreaChart :series="series" :height="180" smooth />
    </div>
    <div>
      <CfAreaChart :series="series" :height="180" smooth stacked />
    </div>
  </div>
</template>
import { CfAreaChart } from '@chufix-design/react';

export default function Demo() {
  const series = [
    { name: 'GET', data: [10, 14, 12, 18, 22, 20, 26, 32, 28, 35, 30, 40] },
    { name: 'POST', data: [3, 5, 4, 6, 8, 7, 10, 12, 11, 14, 13, 16] },
    { name: 'PUT', data: [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7] },
    { name: 'DELETE', data: [0, 1, 0, 2, 1, 1, 2, 3, 2, 3, 4, 3] },
  ];
  return (
    <>
      <CfAreaChart series={series} stacked smooth />
    </>
  );
}
import { CfAreaChart } from '@chufix-design/react';

export default function Demo() {
  const series = [
    { name: 'GET', data: [10, 14, 12, 18, 22, 20, 26, 32, 28, 35, 30, 40] },
    { name: 'POST', data: [3, 5, 4, 6, 8, 7, 10, 12, 11, 14, 13, 16] },
    { name: 'PUT', data: [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7] },
    { name: 'DELETE', data: [0, 1, 0, 2, 1, 1, 2, 3, 2, 3, 4, 3] },
  ];
  return (
    <>
      <CfAreaChart series={series} stacked smooth />
    </>
  );
}

API

Props

属性类型默认值说明
seriesAreaSeries[]{ name?, data: number[] }[]
labelsstring[]自动 0..n-1x 轴标签
widthnumber480SVG 宽度
heightnumber240SVG 高度
stackedbooleanfalse堆叠模式(series 值累加)
smoothbooleanfalse平滑曲线
showGridbooleantrue显示网格
showLabelsbooleantrue显示坐标轴标签
showLegendbooleantrue显示图例
showTooltipbooleantrue启用 hover tooltip
valueFormatter(value, item: AreaChartTooltipItem) => stringtooltip 内单 series 值的格式化
tooltipFormatter(payload: AreaChartInteractionPayload) => string完整 tooltip HTML 自渲染
ariaLabelstring透传给根 <svg>aria-label

Events

Vue 事件React 回调载荷类型说明
item-enteronItemEnterAreaChartInteractionPayload鼠标进入某 x 位置时触发
item-leaveonItemLeaveAreaChartInteractionPayload鼠标离开时触发
legend-toggleonLegendToggle(index: number, hidden: boolean)点击图例切换 series 显隐

类型

interface AreaChartTooltipItem {
  name?: string;
  value: number;
  colorIndex: number;
  seriesIndex: number;
  dataIndex: number;
}

interface AreaChartInteractionPayload {
  label: string;
  dataIndex: number;
  items: AreaChartTooltipItem[];
  nativeEvent?: MouseEvent;
}

反馈与讨论

AreaChart 面积图 的讨论

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