One Chart

快速上手

安装

One Chart 是独立的 npm 包,peer 依赖 @geektech/tsone:

bun add @geektech/tsone @geektech/one-chart

第一个图表

创建一个组件实例,传入数据并挂载到 DOM 节点。图表会渲染为一个 <svg> 元素,宽高可通过 props 配置,默认自适应内容。

季度销量050100150200250300Q1Q2Q3Q4
查看代码
import { OneBarChart } from '@geektech/one-chart';

// 分组柱状图
const chart = new OneBarChart({
  title: '季度销量',
  categories: ['Q1', 'Q2', 'Q3', 'Q4'],
  series: [
    { name: '华东', data: [120, 200, 150, 280] },
    { name: '华南', data: [80, 110, 130, 160] },
  ],
  showValues: true,
});
chart.mount(document.querySelector('#app')!);

// 横向模式:分类放到 Y 轴,适合分类名较长的场景
const horizontal = new OneBarChart({
  title: '季度销量(横向)',
  categories: ['Q1', 'Q2', 'Q3', 'Q4'],
  series: [
    { name: '华东', data: [120, 200, 150, 280] },
    { name: '华南', data: [80, 110, 130, 160] },
  ],
  horizontal: true,
});
horizontal.mount(document.querySelector('#app2')!);
import { OneBarChart } from '@geektech/one-chart';

const chart = new OneBarChart({
  categories: ['Q1', 'Q2', 'Q3', 'Q4'],
  series: [{ name: '华东', data: [120, 200, 150, 280] }],
});
chart.mount(document.querySelector('#app')!);

响应式更新

图表组件继承自 TSone 的 Component:调用 setProps 或修改 state 后,图表的 SVG 节点会在下一次渲染中自动更新(由 TSone 响应式调度器批处理)。

chart.setProps({
  categories: ['Q1', 'Q2', 'Q3', 'Q4', 'Q5'],
  series: [{ name: '华东', data: [1, 2, 3, 4, 5] }],
});

动画

动画默认开启,基于原生 SVG SMIL 实现(无需逐帧 JS):首次挂载时图形从起点形态生长出现,数据变更时从旧几何平滑过渡到新几何,容器尺寸(width / height)变化时 SVG 根节点同步缩放。传 animation: false 完全关闭,或传入 { duration: 800, easing: 'easeInOut' } 调节时长与缓动;初始化 / 数据变更 / 容器大小变更三类动画可分别用 init / update / resize 开关。系统启用「减少动态效果」时动画自动关闭。

通用属性

所有图表共享以下基础属性:

通用属性
名称签名说明
width / heightnumber画布尺寸(px),默认 640 × 400
titlestring图表标题,显示在左上角
marginPartial<{ top; right; bottom; left }>绘图区外边距,默认 16/24/44/52
colorsstring[]调色板,按系列顺序取色并循环
showLegendboolean是否显示图例,默认 true
ariaLabelstring无障碍标签,默认取标题或图表名
tooltipboolean | { formatter }是否启用 tooltip,默认 true;传入对象时可自定义内容格式
animationboolean | { duration; easing; init; update; resize }是否启用动画,默认 true;传对象可配置时长、缓动并单独开关初始化 / 数据变更 / 容器大小变更动画