更新记录

1.1.0(2026-08-22)

  • 上传示例代码项目;
  • uts加密插件鸿蒙平台无法正常编译,请购买源码授权版。

1.0.0(2026-08-21)

  • 首次发布:19 种图表组件,App 原生绘制,小程序 Canvas 2D 绘制;
  • uts加密插件鸿蒙平台无法正常编译,请购买源码授权版。

平台兼容性

uni-app x(4.41)

Chrome Safari Android iOS 鸿蒙 微信小程序
× ×

umi-charts-x

uni-app x 图表组件库。App 端使用原生 DrawableContext 绘制,小程序 / 鸿蒙元服务使用 Canvas 2D 绘制,配置风格接近 ECharts option

仅支持 uni-app x(uvue + UTS),不支持传统 uni-app(vue/nvue)。
要求 HBuilderX ^4.41、uni-app x ^4.41

特性:

  • 19 种图表组件,easycom 即用
  • App 原生绘制,小程序 Canvas 2D,同一套 option
  • 触摸 Tooltip、深色模式、折叠屏宽屏自适应
  • UTS 实现,支持 Android / iOS / 鸿蒙 / 微信小程序,上述端均开启摇树

查询配置: umi-charts-x 配置文档

安装

  1. DCloud 插件市场 导入本插件到项目 uni_modules/umi-charts-x
  2. 组件符合 easycom 规范,导入后无需 import、无需注册,页面中直接使用标签即可

若编译器未自动识别,在项目 pages.json 中补充:

{
  "easycom": {
    "autoscan": true,
    "custom": {
      "^umi-(.*)": "@/uni_modules/umi-charts-x/components/umi-$1/umi-$1.uvue"
    }
  }
}

快速开始

UTS 中请使用 mkOption() / mkSeries() 创建配置,不要写对象字面量。

<template>
  <umi-line :option="option" :height="440"></umi-line>
</template>

<script setup lang="uts">
  import { mkOption, mkSeries, ECOption, SeriesOpt } from '@/uni_modules/umi-charts-x'

  const option = computed(() : ECOption => {
    const o = mkOption()
    const xa = o.xAxis
    if (xa != null) {
      xa.data = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] as string[]
    }
    const s = mkSeries()
    s.data = [150, 230, 224, 218, 135, 147, 260] as number[]
    o.series = [s] as SeriesOpt[]
    return o
  })
</script>

柱状图只需把组件换成 umi-bar,并把 s.type 设为 'bar'

<umi-bar :option="option" :height="440"></umi-bar>
s.type = 'bar'

组件列表

组件 series.type 说明
umi-line line 折线 / 面积 / 阶梯
umi-bar bar 柱状图
umi-pictorial-bar pictorialBar 象形柱图
umi-pie pie 饼图
umi-scatter scatter 散点 / 气泡
umi-effect-scatter effectScatter 涟漪散点
umi-candlestick candlestick K 线
umi-radar radar 雷达图
umi-boxplot boxplot 盒须图
umi-heatmap heatmap 热力图
umi-graph graph 关系图
umi-lines lines 路径飞线
umi-tree tree 树图
umi-treemap treemap 矩形树图
umi-sunburst sunburst 旭日图
umi-parallel parallel 平行坐标
umi-sankey sankey 桑基图
umi-funnel funnel 漏斗图
umi-gauge gauge 仪表盘

通用属性

所有图表组件属性一致:

属性 类型 默认值 说明
option ECOption mkOption() 图表配置
width string \| number '100%' 宽度。纯数字按 rpx
height string \| number 400 高度。纯数字按 rpx

示例:

<umi-line :option="option" width="100%" :height="440"></umi-line>
<umi-pie :option="option" height="500rpx"></umi-pie>

option 配置

完整 option 字段可在线 查询配置

通过 mkOption() 得到 ECOption

字段 类型 说明
color string[] 调色盘
backgroundColor string 背景色。#000 / #000000 / black 时进入深色模式
tooltip TooltipOpt \| null 触摸提示。show 默认 true,可按 ECharts 方式自定义

mkOption() 已创建 tooltip,访问前判空。五大类自定义:

内容自定义 formatter

字符串模板(与 ECharts 相同占位符):

const t = o.tooltip
if (t != null) {
  t.formatter = '{b}<br/>{a}:{c}'
}

{a} 系列名,{b} 类目,{c} 数值,{d} 百分比;多系列 {a0} {c1}

函数形式:

import { TooltipParams, TipAsyncCb } from '@/uni_modules/umi-charts-x'

t.formatterFn = (p : TooltipParams, ticket : string, cb : TipAsyncCb) : string => {
  return p.title + '<br/>' + p.items[0].seriesName + ':' + p.items[0].valueText
}

样式自定义

import { mkTooltipTextStyle } from '@/uni_modules/umi-charts-x'

t.backgroundColor = 'rgba(255,255,255,0.96)'
t.borderColor = '#5470C6'
t.borderWidth = 1
t.padding = 12
const ts = mkTooltipTextStyle()
ts.color = '#1D2129'
ts.fontSize = 14
t.textStyle = ts
t.extraCssText = 'background:#fff;color:#333'

位置自定义

t.position = 'top'   // top / bottom / left / right / inside
t.confine = true
t.positionFn = (point : number[], _p : TooltipParams, size : number[]) : number[] => {
  return [point[0] + 12, point[1] - size[1] - 8] as number[]
}

异步 tooltip

与 ECharts 相同:先返回占位文案,再 callback(ticket, html)

t.formatterFn = (p : TooltipParams, ticket : string, cb : TipAsyncCb) : string => {
  setTimeout(() => {
    cb(ticket, p.title + '<br/>已加载')
  }, 600)
  return p.title + '<br/>加载中...'
}

完全自定义内容

uni-app x 没有浏览器 DOM,提示画在 Canvas 上。用 formatterFn 返回完整 HTML 字符串(支持 <br/>,其余标签会去掉),再用 backgroundColor / extraCssText 做皮肤。若要用自己的 view 浮层:t.showContent = false,在 formatterFn 里更新自己的界面。 | xAxis | AxisOpt \| null | 类目轴。data 为类目名 | | yAxis | AxisOpt \| null | 数值轴。热力图等可用 yAxis.data | | series | SeriesOpt[] | 系列,至少一项 |

mkSeries() 常用字段:

字段 类型 默认值 适用
type string 'line' 图表类型,需与组件对应
name string '' 系列名,Tooltip 展示
data number[] [] 主数值
color string '' 系列颜色
names string[] [] 类目名(优先于 xAxis.data

折线 / 面积

字段 类型 说明
smooth boolean 平滑曲线
areaStyle AreaStyleOpt 面积填充,用 mkAreaStyle() 创建,可设 opacity
symbol string 拐点标记,'none' 隐藏
symbolSize number 标记大小,默认 6
showSymbol boolean 是否显示标记
lineStyle LineStyleOpt width / typesolid
step string 阶梯折线,如 'start'
import { mkOption, mkSeries, mkAreaStyle, ECOption, SeriesOpt } from '@/uni_modules/umi-charts-x'

const option = computed(() : ECOption => {
  const o = mkOption()
  const xa = o.xAxis
  if (xa != null) {
    xa.data = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] as string[]
  }
  const s = mkSeries()
  s.data = [820, 932, 901, 934, 1290, 1330, 1320] as number[]
  s.smooth = true
  s.symbol = 'none'
  const a = mkAreaStyle()
  a.opacity = 0.35
  s.areaStyle = a
  o.series = [s] as SeriesOpt[]
  return o
})

柱状 / 象形柱

s.type = 'bar'
s.color = '#FF7A45'

象形柱:type = 'pictorialBar'symbol'diamond'

饼图

类目写在 xAxis.data(或 series.names),数值写在 series.data

s.type = 'pie'
s.data = [36, 24, 28, 12] as number[]

散点 / 气泡 / 涟漪

字段 说明
dataX X 数值
data Y 数值
r 气泡半径(气泡图)
brush 涟漪画笔:fill / stroke
period / scale / waves 涟漪周期、缩放、波数
s.type = 'scatter'
s.dataX = [12, 22, 28, 36, 45, 52, 61, 72] as number[]
s.data = [18, 32, 20, 44, 28, 50, 36, 58] as number[]
s.r = [10, 22, 14, 30, 18, 36, 16, 26] as number[]

涟漪散点使用 umi-effect-scattertype = 'effectScatter'

K 线 / 盒须

K 线:open / close / low / high,涨跌色 upColor / downColor

盒须:boxMin / q1 / median / q3 / boxMax

雷达 / 热力 / 仪表盘

图表 关键字段
雷达 dataradarMax
热力 dataxAxis.data × yAxis.data 行优先展开,min / max
仪表盘 data 取第一项为当前值,min / max / name / unit
s.type = 'gauge'
s.data = [72] as number[]
s.min = 0
s.max = 100
s.name = '完成率'
s.unit = '%'

关系 / 路径 / 树 / 桑基

图表 关键字段
关系图 source / target 边索引,cats 分类,layout 默认 'force'
飞线 x0 y0 x1 y1 起终点,namescurve / period / trail
树图 parent 父节点索引(根为 -1),orientLR / TB
矩形树 / 旭日 parent + data 数值
桑基 source / target / data 流量
漏斗 data 各层数值,sort 默认 'descending'
平行坐标 data 按轴数量展开,可用 option.color 区分系列

工具方法

@/uni_modules/umi-charts-x 引入:

方法 返回 说明
mkOption() ECOption 创建配置(已带默认 x/y 轴和 tooltip)
mkSeries() SeriesOpt 创建系列
mkAreaStyle() AreaStyleOpt 面积样式
mkLineStyle() LineStyleOpt 线样式
mkTooltip() TooltipOpt 提示框
mkTooltipTextStyle() TooltipTextStyle 提示文字样式
mkAxis() AxisOpt 坐标轴

注意事项

  1. 仅 uni-app x:页面需为 .uvue,脚本为 UTS。
  2. 配置必须用工厂方法:UTS 不能把普通对象当成 ECOption / SeriesOpt 使用。
  3. 组件与 type 对应:例如 umi-pieseries.type 应为 'pie'
  4. 深色模式:设置 option.backgroundColor = '#000000'(或 #000 / black)。
  5. 关闭 Tooltipo.tooltip!.show = false(先判空)。
  6. 尺寸单位width / height 传入纯数字时按 rpx,也可传 '100%''400rpx'
  7. 不采集数据、无广告、无需额外系统权限

更新日志

changelog.md

隐私、权限声明

  1. 本插件需要申请的系统权限列表:无
  2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:插件不采集任何数据
  3. 本插件是否包含广告:无

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: