更新记录
1.0.0(2026-06-07) 下载此版本
初次提交
平台兼容性
uni-app x(5.07)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | 5.0 | √ | √ | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
laoqianjunzi-echart
laoqianjunzi-echart 是一个面向 uni-app x 的原生 Canvas 图表插件,提供统一的数据模型、组件化接入方式和跨端编译能力,适用于 Web、Android、Harmony、iOS 场景。
插件以 option 配置为核心,同时支持一组内置预设配置,适合快速接入常用图表,也适合在业务项目中按统一数据模型继续扩展。
功能特性
- 原生 Canvas 渲染,不依赖 WebView
- 统一支持
Web、Android、Harmony、iOS - 支持组件方式接入,适配
uni-app x页面和组件树 - 支持通用图表配置和预设图表配置两种使用模式
- 支持柱状、折线、山峰、饼图、环图、雷达、仪表盘、环形进度、水位球、散点、气泡、K 线、漏斗、热力图
- 支持运行时更新数据、更新动画时长、切换动画开关、导出图片、读取绘制状态
- 支持点击命中、图例切换、缩放动作、框选、拖拽、十字准星等增强交互能力
平台支持
根据当前插件配置与项目内验证结果:
Web:支持Android:支持,minVersion为21Harmony:支持iOS:支持
说明:当前仓库内已完成 Web、Android、Harmony 的真实编译验证;iOS 是否能在本机继续运行,仍取决于签名或基座环境。
目录结构
uni_modules/laoqianjunzi-echart/
├─ components/
│ └─ laoqianjunzi-echart/
│ └─ laoqianjunzi-echart.uvue
├─ pages/
│ └─ index.uvue
├─ utssdk/
│ ├─ interface.uts
│ ├─ adapter.uts
│ ├─ engine.uts
│ ├─ index.uts
│ ├─ web/
│ ├─ app-android/
│ ├─ app-harmony/
│ └─ app-ios/
└─ package.json
快速开始
1. 组件方式使用
<template>
<laoqianjunzi-echart :option="chartOption" height="320px" />
</template>
<script setup lang="ts">
const chartOption = {
title: '经营走势',
subtitle: '柱状 + 折线',
chartType: 'bar',
categories: ['一月', '二月', '三月', '四月'],
series: [
{
type: 'bar',
name: '订单量',
color: '#2563eb',
showValue: true,
data: [120, 148, 132, 180]
},
{
type: 'line',
name: '客单价',
color: '#f97316',
data: [52, 60, 58, 68]
}
]
}
</script>
2. 预设方式使用
<template>
<laoqianjunzi-echart :presetOptions="presetOption" height="320px" />
</template>
<script setup lang="ts">
const presetOption = {
type: 'radar1',
title: '渠道覆盖',
total: 100,
series: ['零售', '企业', '渠道', '复购', '口碑', '服务'],
data: [
{ seriesName: '零售', value: 72 },
{ seriesName: '企业', value: 84 },
{ seriesName: '渠道', value: 68 },
{ seriesName: '复购', value: 58 },
{ seriesName: '口碑', value: 79 },
{ seriesName: '服务', value: 88 }
]
}
</script>
组件属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
option |
object |
createDefaultChartOption() |
通用图表配置 |
presetOptions |
object \| null |
null |
预设图表配置 |
width |
string |
'100%' |
组件宽度,建议使用 px、% |
height |
string |
'320px' |
组件高度 |
theme |
object |
{} |
主题配置 |
autoResize |
boolean |
true |
是否自动监听尺寸变化并重绘 |
animation |
boolean |
true |
是否启用动画 |
animationDuration |
number |
360 |
动画时长 |
loading |
boolean |
false |
是否显示加载遮罩 |
emptyText |
string |
'暂无数据' |
空数据提示文案 |
组件事件
| 事件名 | 说明 |
|---|---|
ready |
组件首次完成尺寸初始化 |
init |
返回组件实例 API |
renderComplete |
当前配置完成绘制 |
click |
点击命中图元时触发 |
dataSelect |
数据选中、动作分发或点击命中时触发 |
legendToggle |
切换图例显隐时触发 |
zoomChange |
视窗缩放变化时触发 |
brushChange |
框选交互时触发 |
panChange |
拖拽交互时触发 |
crosshairMove |
十字准星移动或命中预览时触发 |
tooltipShow |
提示层显示时触发 |
tooltipHide |
提示层隐藏时触发 |
error |
配置非法或更新失败时触发 |
组件实例方法
在 init 事件中或 ref 引用组件后可访问以下方法:
| 方法名 | 说明 |
|---|---|
setOption(option) |
设置通用图表配置并重绘 |
setPresetOptions(option) |
设置预设配置并重绘 |
getOption() |
获取当前通用配置快照 |
getPresetOptions() |
获取当前预设配置快照 |
resize() |
重新读取容器尺寸并重绘 |
drawing(data) |
按当前配置结构更新数据 |
updatePresetData(data) |
仅更新预设配置中的 data |
setSpeed(speed) |
更新动画时长 |
setAnimate(animate) |
切换动画开关 |
setScale(scale) |
设置缩放倍率 |
clear() |
清空画布 |
dispose() |
销毁内部状态 |
toDataURL() |
导出当前图表为 base64 图片 |
getimgData() |
获取当前画布像素数据 |
getPainted() |
获取当前是否已完成绘制 |
menuEvent(x, y) |
手动触发命中检测 |
getViewportState() |
获取当前视窗状态 |
toggleLegend(index) |
切换图例项显隐 |
dispatchAction(action) |
分发交互动作 |
通用图表类型
chartType 或 series[].type 当前支持以下类型:
| 类型 | 说明 |
|---|---|
bar |
柱状图 |
overlayBar |
叠加柱图 |
line |
折线图 |
mountain |
山峰图 / 面积峰图 |
pie |
饼图 |
ring |
环图 |
radar |
雷达图 |
gauge |
仪表盘 |
annular |
环形进度 |
ball |
水位球 |
scatter |
散点图 |
bubble |
气泡图 |
candlestick |
K 线图 |
funnel |
漏斗图 |
heatmap |
热力图 |
预设图表类型
presetOptions.type 当前支持以下预设类型:
| 类型 | 说明 |
|---|---|
columnar1 |
单柱状图 |
columnar2 |
叠加双柱状图 |
columnar3 |
正负柱状图 |
line1 |
单折线图 |
line2 |
多折线图 |
pieshaped |
饼图预设 |
radar1 |
标准雷达图 |
radar2 |
扇区雷达图 |
dashboard |
仪表盘预设 |
annular |
环形进度预设 |
ball |
水位球预设 |
mountain |
山峰图预设 |
通用配置说明
顶层配置
常用顶层字段如下:
| 字段 | 说明 |
|---|---|
title |
主标题 |
subtitle |
副标题 |
chartType |
当前主图类型 |
categories |
类目轴数据 |
palette |
调色板 |
padding |
图表内边距 |
fontSize |
默认字号 |
series |
图表数据序列 |
theme |
主题色配置 |
dataZoom |
缩放配置 |
interaction |
交互模式配置 |
xAxis |
X 轴配置 |
yAxis |
Y 轴配置 |
legend |
图例配置 |
grid |
绘图区配置 |
radar |
雷达图配置 |
gauge |
仪表盘配置 |
annular |
环形进度配置 |
tooltip |
提示层配置 |
visualMap |
热力图颜色映射 |
animation |
是否启用动画 |
animationDuration |
动画时长 |
序列配置
series 中常用字段:
| 字段 | 说明 |
|---|---|
type |
序列类型 |
name |
序列名称 |
color |
主色 |
data |
序列数据 |
showValue |
是否显示数值标签 |
labelShow |
是否显示标签 |
labelInside |
标签是否绘制在内部 |
axisIndex |
绑定到第几个 Y 轴 |
stack |
堆叠分组名 |
area |
是否绘制面积 |
smooth |
是否平滑曲线 |
barWidth |
柱宽 |
lineWidth |
线宽 |
symbolSize |
点尺寸 |
negativeColor |
K 线或负值颜色 |
borderColor |
描边颜色 |
negativeBorderColor |
负向描边颜色 |
markLine |
标线配置 |
markPoint |
标记点配置 |
markArea |
标记区域配置 |
数据格式示例
柱状 / 折线 / 山峰
series: [
{
type: 'bar',
name: '订单量',
data: [120, 148, 132, 180]
},
{
type: 'line',
name: '客单价',
data: [52, 60, 58, 68]
}
]
饼图 / 环图
series: [
{
type: 'pie',
name: '来源',
data: [
{ name: '自然流量', value: 42, color: '#2563eb' },
{ name: '私域复购', value: 26, color: '#14b8a6' }
]
}
]
雷达图
radar: {
indicators: [
{ name: '执行力', max: 100 },
{ name: '稳定性', max: 100 }
]
},
series: [
{
type: 'radar',
name: '本月',
data: [84, 72]
}
]
散点 / 气泡
series: [
{
type: 'scatter',
name: '用户',
data: [
{ name: 'A-17', x: 8, y: 126, size: 12 },
{ name: 'B-09', x: 14, y: 188, size: 14 }
]
}
]
K 线
series: [
{
type: 'candlestick',
name: 'BTC/USDT',
data: [
{ open: 96, close: 104, low: 92, high: 108 },
{ open: 104, close: 101, low: 98, high: 110 }
]
}
]
热力图
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed']
},
yAxis: {
type: 'category',
data: ['09:00', '12:00']
},
series: [
{
type: 'heatmap',
data: [
{ value: [0, 0, 18] },
{ value: [1, 0, 26] }
]
}
]
主题配置
theme 常用字段:
| 字段 | 说明 |
|---|---|
backgroundColor |
背景色 |
gridColor |
网格色 |
axisLineColor |
坐标轴线颜色 |
axisTextColor |
坐标轴文字颜色 |
textColor |
主文字颜色 |
mutedColor |
弱化文字颜色 |
radarTextColor |
雷达标题颜色 |
radarNumberColor |
雷达数字颜色 |
示例:
const chartTheme = {
backgroundColor: '#f4f7ff',
gridColor: '#d4dcf3',
axisLineColor: '#7c8aa8',
axisTextColor: '#62708e',
textColor: '#11203a',
mutedColor: '#73819b'
}
动作分发
组件实例支持通过 dispatchAction 触发交互动作,当前支持:
showTiphideTiphighlightdownplayselectunselectlegendTogglesetInteractionModeresetZoomzoomRange
示例:
chartRef.value?.dispatchAction({
type: 'showTip',
seriesIndex: 0,
dataIndex: 2
})
chartRef.value?.dispatchAction({
type: 'setInteractionMode',
mode: 'brush'
})
演示页面
插件内置演示页:
uni_modules/laoqianjunzi-echart/pages/index
如果当前工程已经在 pages.json 中注册该页面,可直接运行查看效果。
使用建议
- 图表容器建议明确设置高度,避免容器高度为
0导致无法绘制 - 当页面内容较长且需要 App 端滚动时,建议外层使用
<scroll-view> - 当仅更新数据时,优先使用
drawing(data)或updatePresetData(data),避免重复构造完整配置 - 当需要跨端稳定布局时,避免依赖
gap,优先使用显式margin - 当需要更复杂的业务组合图时,优先使用
option模式而不是预设模式
当前版本说明
当前文档描述的是插件现有独立能力与当前组件 API,不包含任何历史插件命名、兼容层或旧接口迁移说明。

收藏人数:
https://gitee.com/laoqianjunzi/laoqianjunzi-echart
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 1149
赞赏 2
下载 12177208
赞赏 1918
赞赏
京公网安备:11010802035340号