这里写自定义目录标题
- [Vue Data UI:这不是图表库,是数据可视化 UI 平台](#Vue Data UI:这不是图表库,是数据可视化 UI 平台)
- [67 个组件,覆盖数据可视化全场景](#67 个组件,覆盖数据可视化全场景)
-
-
- [1. 图表(Charts)](#1. 图表(Charts))
- [2. 迷你图(Mini Charts)](#2. 迷你图(Mini Charts))
- [3. 3D 图表](#3. 3D 图表)
- [4. 表格(Tables)](#4. 表格(Tables))
- [5. 地图(Maps)](#5. 地图(Maps))
- [6. 评分(Rating)](#6. 评分(Rating))
- [7. 工具组件(Utilities)](#7. 工具组件(Utilities))
-
- 硬核功能拆解
-
-
- 零依赖渲染
- [通用组件 VueDataUi ------ 一个组件打天下](#通用组件 VueDataUi —— 一个组件打天下)
- [可视化配置生成器 ------ 所见即所得](#可视化配置生成器 —— 所见即所得)
- [插槽系统 ------ 灵活到可以"魔改"](#插槽系统 —— 灵活到可以"魔改")
- [主题系统 ------ 9 套内置主题 + 自定义主题](#主题系统 —— 9 套内置主题 + 自定义主题)
- [大数据优化 ------ LTTB 降采样](#大数据优化 —— LTTB 降采样)
- 无障碍(a11y)
- [导出全家桶 ------ PDF / PNG / CSV / SVG](#导出全家桶 —— PDF / PNG / CSV / SVG)
- 响应式布局
- 组合式工具函数
- 接入成本:低到离谱
- 为什么现在需要这样的库?
- 相关链接
-
- [Vue3 宝藏图表库:Vue Data UI 核心总结](#Vue3 宝藏图表库:Vue Data UI 核心总结)
-
- [1. 痛点:为什么传统图表库(如 ECharts)让人疲惫?](#1. 痛点:为什么传统图表库(如 ECharts)让人疲惫?)
- [2. 什么是 Vue Data UI?](#2. 什么是 Vue Data UI?)
- [3. 硬核功能拆解](#3. 硬核功能拆解)
- [4. 快速接入指南](#4. 快速接入指南)
Vue Data UI:这不是图表库,是数据可视化 UI 平台
Vue Data UI 是一个专门为 Vue 3 打造的开源数据可视化组件库。目前 GitHub 2.4K+ Star,npm 最新版本 v3.20.x,仍在活跃迭代。
与 ECharts、Chart.js、D3 等传统图表库定位完全不同:
| ECharts 类库 | vue-data-ui | |
|---|---|---|
| 核心思路 | 给你底层能力,自己配 | 给你完整组件,直接用 |
| 上手成本 | 高(需理解 option 体系) | 低(Vue 组件式 API) |
| 默认 UI | 需要大量主题定制 | 开箱即用,SaaS/AI 风格 |
| 组件范围 | 基础图表 | 图表 + 迷你图 + 表格 + 地图 + 工具 + 3D |
| 渲染方式 | Canvas/SVG | 纯 SVG + Canvas,零外部依赖 |
67 个组件,覆盖数据可视化全场景
官方目前内置 67 个组件,分为 7 大类:



1. 图表(Charts)
从常规的 XY 折线/柱状图、散点图、雷达图,到高阶的:
- VueUiCandlestick --- K 线图,金融数据必备
- VueUiChord --- 和弦图,关系网络可视化
- VueUiDag --- DAG 有向无环图,工作流/依赖图
- VueUiGalaxy --- 星系图,多维度关系展示
- VueUiRidgeline --- 山脊图,时间序列密度分布
- VueUiTreemap / VueUiCirclePack --- 层级数据嵌套展示
- VueUiWordCloud --- 词云
- VueUiBump --- 排名变化流图
2. 迷你图(Mini Charts)
Sparkline、Sparkbar、Sparkgauge、SparkHistogram、SparkStackbar、SparkTrend、Gizmo、Bullet
专门解决后台首页小卡片数据概览的痛点------传统图表库为一个小数字趋势图需要写一堆配置,vue-data-ui 直接一个组件搞定。
3. 3D 图表
VueUi3dBar --- 3D 柱状图,不用引入 Three.js。
4. 表格(Tables)
VueUiTable、VueUiTableHeatmap、VueUiTableSparkline、VueUiCarouselTable
表格自带热力图渲染、Sparkline 内嵌、轮播滚动,不是简单的 <table> 包装。
5. 地图(Maps)
VueUiWorld(世界地图)、VueUiGeo(地理地图),支持数据绑定和交互。
6. 评分(Rating)
VueUiRating(星级)、VueUiSmiley(表情评分)。
7. 工具组件(Utilities)
VueUiDashboard(仪表板布局)、VueUiKpi(KPI 数字卡片)、VueUiDigits(数字动画)、VueUiTimer(计时器)、VueUiAccordion(折叠面板)、VueUiAnnotator(图表注释器)、VueUiIcon(内置图标库)等 10+ 个。
硬核功能拆解
零依赖渲染
所有图表基于 SVG 和 Canvas 自研绘制,不依赖 ECharts、D3、Chart.js 等任何第三方图表引擎。意味着:
- 包体积可控(按需引入)
- 没有外部库的 breaking change 风险
- 渲染性能自主优化
通用组件 VueDataUi ------ 一个组件打天下
vue
<script setup>
import { ref } from "vue";
import { VueDataUi } from "vue-data-ui";
import "vue-data-ui/style.css";
const dataset = ref([...]);
const config = ref({...});
</script>
<template>
<VueDataUi
component="VueUiXy"
:dataset="dataset"
:config="config"
/>
</template>
通过 component 属性动态指定图表类型,配合 v-if 或路由参数,可以快速实现图表类型切换。
可视化配置生成器 ------ 所见即所得
官方文档站内置交互式图表生成器:
- 左侧编辑数据和配置
- 右侧实时渲染预览
- 一键复制 Vue 代码
对于后端开发、全栈开发者、独立开发者来说,效率提升是质变------不需要先理解一套 option 规范再翻译成代码。
插槽系统 ------ 灵活到可以"魔改"
vue
<VueUiDonut :config="config" :dataset="dataset">
<!-- 自定义 SVG 元素注入 -->
<template #svg="{ svg }">
<foreignObject x="100" y="0" height="100" width="150">
<div>自定义标注</div>
</foreignObject>
</template>
<!-- 自定义图例 -->
<template #legend="{ legend }">
<div v-for="item in legend">{{ item.name }}</div>
</template>
<!-- 自定义 Tooltip -->
<template #tooltip="{ datapoint, series }">
<div class="custom-tooltip">
<span>{{ series.name }}: {{ datapoint.value }}</span>
</div>
</template>
<!-- 图表内嵌套另一个图表 -->
<template #tooltip-before="{ datapoint }">
<VueUiSparkline :dataset="datapoint.trend" />
</template>
<!-- 水印(仅在导出/打印时显示) -->
<template #watermark="{ isPrinting }">
<div v-if="isPrinting" class="watermark">CONFIDENTIAL</div>
</template>
</VueUiDonut>
支持的插槽包括:#svg、#legend、#tooltip、#tooltip-before、#tooltip-after、#watermark、#chart-background、#pattern、#reset-action 等。
主题系统 ------ 9 套内置主题 + 自定义主题
js
const config = ref({
theme: 'dark', // default | dark | zen | hack | concrete | celebration | celebrationNight | minimal | minimalDark
});
支持通过 getVueDataUiConfig + mergeConfigs 快速创建自定义主题:
js
import { getVueDataUiConfig, mergeConfigs } from 'vue-data-ui';
const customTheme = getVueDataUiConfig('vue_ui_xy', {
colorBackground: '#1A1A1A',
colorTextPrimary: '#CD9077',
colorTextSecondary: '#825848',
colorGrid: '#CD9077',
});
const config = computed(() => mergeConfigs({
defaultConfig: customTheme,
userConfig: { /* 业务配置 */ }
}));
大数据优化 ------ LTTB 降采样
对于超大数据集(>5k ~ >10k 点),XY、Scatter、Sparkline 等图表自动启用 LTTB(Largest Triangle Three Bucket)降采样算法,保留数据形状的同时减少 DOM 节点。
js
const config = ref({
downsample: { threshold: 500 }, // 可自定义阈值
});
无障碍(a11y)
- 键盘导航(方向键遍历数据点)
- 屏幕阅读器提示文本可配置
#hint插槽显示导航提示altCopy功能:一键复制图表 alt 文本
导出全家桶 ------ PDF / PNG / CSV / SVG
vue
<VueUiXy ref="chart" :dataset="dataset" :config="config" />
<script setup>
const chart = ref(null);
// 获取 Base64 图片
const { imgUri, base64 } = await chart.value.getImage({ scale: 2 });
// 生成 PDF(需安装 jspdf 作为 peer dependency)
await chart.value.generatePdf();
// 生成 CSV
await chart.value.generateCsv();
// 获取原始数据
const data = await chart.value.getData();
</script>
响应式布局
大部分图表支持 config.responsive: true,可自适应容器尺寸。注意:需要放在固定尺寸容器内,避免 100% 高度导致无限增长。
组合式工具函数
js
import {
useObjectBindings, // 将嵌套配置对象扁平化为响应式 ref
mergeConfigs, // 合并默认配置和用户配置
getVueDataUiConfig, // 获取组件默认配置
abbreviate, // 文本缩写
darkenColor, // 颜色加深
lightenColor, // 颜色变浅
shiftColorHue, // 色相偏移
createTSpans, // SVG 多行文本
getCumulativeAverage, // 累积平均
getCumulativeMedian, // 累积中位数
} from 'vue-data-ui';
useObjectBindings 尤其有用------能把深嵌套的 config.style.chart.backgroundColor 自动转成扁平的响应式绑定,配合表单控件做实时配置编辑器非常方便。
接入成本:低到离谱
bash
npm i vue-data-ui
js
// main.js ------ 全局注册
import 'vue-data-ui/style.css';
import { VueUiXy } from 'vue-data-ui';
app.component('VueUiXy', VueUiXy);
vue
<!-- 局部使用 -->
<script setup>
import { VueUiRadar, VueUiDonut } from 'vue-data-ui';
import 'vue-data-ui/style.css';
</script>
TypeScript 类型定义内置,无需额外安装 @types。Nuxt 项目也有官方案例:https://github.com/graphieros/vue-data-ui-doc
为什么现在需要这样的库?
前端可视化正在经历一次范式转移:
| 过去 | 现在 |
|---|---|
| 功能优先(能不能画出来) | 产品感优先(看起来好不好) |
| 配置驱动(写 option) | 组件驱动(用 Vue 组件) |
| 图表是"功能" | 图表是"UI" |
| 后台 = 管理后台 | 后台 = 数据产品 |
AI 产品爆发之后,后台系统的定位已经变了------不再是传统的 ERP/CRM 管理界面,而是实时数据产品、AI 驾驶舱、智能分析平台。这类场景的核心诉求:
- 快 --- 快速搭建数据页面
- 美 --- 默认 UI 就能直接上线
- Vue 原生 --- 不用在 ECharts 的 option 和 Vue 的响应式之间做桥接
- 全 --- 图表、表格、KPI、地图、评分、工具,一套搞定
vue-data-ui 恰好全部命中。
相关链接
- 项目地址:https://github.com/graphieros/vue-data-ui
- 在线文档:https://vue-data-ui.graphieros.com/
- 安装 :
npm i vue-data-ui
Vue3 宝藏图表库:Vue Data UI 核心总结
核心亮点:67个组件、零外部依赖、Vue 3 原生、开箱即用的产品级 UI。
1. 痛点:为什么传统图表库(如 ECharts)让人疲惫?
- 配置繁琐 :简单的图表往往需要数百行
option配置。 - 调试困难 :
tooltip样式、legend位置、grid边距、label重叠等问题耗费大量时间。 - 风格固化:默认样式与传统 ERP 风格绑定,难以匹配现代 SaaS 或 AI 产品的 UI 设计系统。
- 核心诉求错位:现代后台更看重"快速出页面、UI 在线、响应式",而非极致的底层图表定制能力。
2. 什么是 Vue Data UI?
Vue Data UI 是专为 Vue 3 打造的开源数据可视化组件库(GitHub 2.4K+ Star)。它不是传统的底层绘图引擎,而是数据可视化 UI 基础设施。
核心优势对比
| 维度 | 传统图表库 (ECharts 等) | Vue Data UI |
|---|---|---|
| 核心思路 | 提供底层能力,自行配置 | 提供完整组件,直接使用 |
| 上手成本 | 高(需学习庞大的 Option 体系) | 低(标准的 Vue 组件式 API) |
| 默认 UI | 需大量主题定制 | 开箱即用,现代 SaaS/AI 风格 |
| 渲染方式 | Canvas / SVG (依赖外部库) | 纯 SVG + Canvas,零外部依赖 |
丰富的组件生态(67个组件,7大类)
- 图表 (Charts) :折线/柱状图、K线图 (
VueUiCandlestick)、和弦图、DAG有向无环图、山脊图、树状图、词云等。 - 迷你图 (Mini Charts):Sparkline、Sparkbar、Gizmo、Bullet 等,专治首页小卡片数据概览。
- 3D 图表 :
VueUi3dBar(无需引入 Three.js)。 - 表格 (Tables):自带热力图渲染、内嵌迷你图、轮播滚动的智能表格。
- 地图 (Maps) :世界地图 (
VueUiWorld)、地理地图 (VueUiGeo)。 - 评分 (Rating):星级评分、表情评分。
- 工具组件 (Utilities):仪表板布局、KPI 数字卡片、数字动画、计时器、折叠面板、图表注释器等。
3. 硬核功能拆解
- 🚀 零依赖渲染:自研 SVG/Canvas 绘制,无第三方图表引擎依赖,包体积可控,无 Breaking Change 风险。
- 🧩 通用组件
VueDataUi:通过component属性动态切换图表类型,配合响应式数据实现无缝切换。 - 🎨 可视化配置生成器:官方文档提供"所见即所得"的编辑器,左侧调参,右侧预览,一键复制代码。
- 🔌 强大的插槽系统 (Slots) :支持深度自定义
#svg、#tooltip、#legend、#watermark(水印) 等,甚至可在 Tooltip 内嵌套其他图表。 - 🌗 主题系统 :内置 9 套主题(default, dark, zen, hack, minimal 等),支持通过
mergeConfigs轻松创建自定义主题。 - ⚡ 大数据优化 (LTTB):针对超大数据集(>5k点),自动启用 LTTB 降采样算法,保留数据形状的同时大幅减少 DOM 节点。
- ♿ 无障碍支持 (a11y):支持键盘导航、屏幕阅读器提示,并提供一键复制图表 Alt 文本功能。
- 📤 导出全家桶:原生支持导出为 PNG、PDF (需 jspdf)、CSV、SVG 格式。
4. 快速接入指南
安装
bash
npm install vue-data-ui
# 或
yarn add vue-data-ui
# 或
pnpm add vue-data-ui
# 67 个组件!Vue3 又一款宝藏图表库火了
## 为什么不想再用 ECharts 了
做过 Vue 3 后台的同学应该都懂:项目一启动,第一件事不是写业务逻辑,而是开始配图表------
```js
option = {
tooltip: { trigger: 'axis', formatter: /* 调半小时 */ },
legend: { top: 'bottom', /* 永远对不齐 */ },
grid: { left: '3%', right: '4%', /* 间距玄学 */ },
xAxis: { type: 'category', data: [] },
yAxis: { type: 'value' },
series: [/* 一百行起步 */]
}
然后进入经典 debug 循环:
- tooltip 样式改一下午
- legend 位置调不对
- grid 边距算不明白
- label 一开全重叠
- formatter 写到最后自己都看不懂
一个看起来简单的柱状图,硬是能堆出 300+ 行配置。更崩溃的是,UI 设计师看完说:"这风格跟我们的设计系统不匹配,重写吧。"
问题不在于 ECharts 不强,而在于它"太强"了------强到你需要为每一个像素写配置。
而现在很多 Vue 3 项目(尤其是 AI 产品、SaaS 后台、数据驾驶舱),核心诉求根本不是"图表功能有多深",而是:快速出页面、UI 在线、别让我调样式。