App Inventor 2 ECharts 图表教程

本文详细介绍 fun123.cn 出品的 ECharts 拓展,手把手教你绘制折线图、柱状图、饼图、仪表图。

一、组件安装

1.1 下载地址

导入后,你会看到两个组件:
  • ECharts — 基础图表
  • ECharts3D — 3D 图表

二、图表类型一览

图表类型方法说明典型场景
折线图Line()带平滑/不平滑切换趋势数据、时序数据
柱状图Bar()支持多系列分组对比数据
饼图Pie()实心/空心可调占比展示
仪表图Gauge()半圆形仪表速度/进度/仪表盘

三、快速上手:5分钟画折线图

界面设计

  1. 拖入一个水平布局,设置宽度”充满”
  2. 在布局内拖入一个Web查看器,设置高度300像素(图表显示区域)
  3. 拖入 ECharts 组件(非可视组件,放任何位置)

代码块

当 Screen1.初始化 时
  // 第一步:初始化图表,指定显示在哪个Web查看器中
  调用 ECharts1.初始化(Web查看器1)

当 按钮_显示折线图.被点击 时
  // 第二步:调用折线图方法,传入标题/图例/标签/数据
  调用 ECharts1.折线图
    标题 = "一周温度变化"
    图例 = ["最高温", "最低温"]
    标签 = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
    数据 = [ [28, 32, 30, 35, 33, 29, 31], [18, 22, 20, 25, 23, 19, 21] ]
    平滑 = 真
就这么简单!三步:初始化 → 调用折线图 → 显示。

四、核心属性设置

4.1 主题样式(7种可选)

主题序号主题名特点
1default默认蓝色风格
2dark深色背景
3macarons马卡龙色系
4roma罗马假日风格
5shine亮光风格
6vintage复古胶片风
7infographic信息图风格
设置 ECharts1.主题序号 = 3    // 使用马卡龙主题
设置 ECharts1.显示动画 = 真    // 开启动画效果
设置 ECharts1.显示数值 = 真    // 显示数据点数值

4.2 透明背景

适合覆盖在其他 UI 元素上的图表:
// ⚠️ 必须在初始化之前设置
设置 ECharts1.透明背景 = 真
调用 ECharts1.初始化(Web查看器1)

4.3 Y轴最小值

控制 Y 轴起始值,避免小数据被”压扁”:
设置 ECharts1.Y轴最小值 = "dataMin"    // 自动取数据最小值
设置 ECharts1.Y轴最小值 = "0"          // 从0开始
设置 ECharts1.Y轴最小值 = "50"         // 从50开始

五、实战案例:实时温度监控面板

5.1 界面布局

┌─────────────────────────────────┐
│ 温度监控面板                     │
├─────────────────────────────────┤
│  [当前温度仪表]   [今日趋势图]    │
├─────────────────────────────────┤
│  最高: 32°C    最低: 18°C       │
├─────────────────────────────────┤
│  [刷新数据]     [保存图表]       │
└─────────────────────────────────┘

5.2 完整代码块

初始化全局变量 时间标签 = ["00:00", "03:00", "06:00", "09:00", "12:00", "15:00", "18:00", "21:00", "24:00"]
初始化全局变量 温度数据 = [[22, 21, 20, 23, 28, 31, 30, 27, 24]]
初始化全局变量 当前温度 = 25

// 屏幕初始化
当 Screen1.初始化 时
  设置 ECharts1.主题序号 = 3
  设置 ECharts1.显示动画 = 真
  设置 ECharts1.透明背景 = 假
  调用 ECharts1.初始化(水平布局_图表区域)
  // 默认显示折线图
  调用 绘制折线图()

// 绘制折线图过程
定义 绘制折线图()
  调用 ECharts1.折线图
    标题 = "今日温度趋势"
    图例 = ["温度(°C)"]
    标签 = 全局变量 时间标签
    数据 = 全局变量 温度数据
    平滑 = 真

// 点击折线图事件
当 ECharts1.被点击 时(图例, 标签, 值)
  设置 标签_当前温度.文本 = 合并字符串("当前: ", 值, "°C")
  调用 对话框1.显示消息对话框(
    合并字符串("时间: ", 标签, "\n温度: ", 值, "°C"),
    "温度详情", "确定")

// 刷新数据(模拟传感器数据更新)
当 按钮_刷新.被点击 时
  初始化局部变量 新温度 = 随机整数(18, 35)
  设置 全局变量 当前温度 = 新温度
  
  // 更新折线图数据(追加新数据点)
  初始化局部变量 旧数据 = 选择列表项(全局变量 温度数据, 1)
  调用 追加列表项(旧数据, 新温度)
  如果 列表长度(旧数据) > 9 则
    调用 删除列表项(旧数据, 1)  // 超过9个点就删最早的
  
  调用 绘制折线图()
  调用 更新仪表图()

// 更新仪表图过程
定义 更新仪表图()
  调用 ECharts1.仪表图
    起始角度 = 225
    结束角度 = -45
    最小值 = 0
    最大值 = 50
    值 = 全局变量 当前温度

// 保存图表为图片
当 按钮_保存.被点击 时
  调用 ECharts1.保存图片("温度趋势图_" + 当前日期时间())

当 ECharts1.图片保存完成 时(图片路径)
  调用 对话框1.显示消息对话框(
    合并字符串("图片已保存到:\n", 图片路径),
    "保存成功", "确定")

六、柱状图:月销售额对比

当 按钮_柱状图.被点击 时
  调用 ECharts1.柱状图
    标题 = "各月销售额(万元)"
    图例 = ["2025年", "2026年"]
    标签 = ["1月", "2月", "3月", "4月", "5月", "6月"]
    数据 = [
      [120, 150, 180, 160, 200, 220],
      [100, 130, 160, 140, 180, 200]
    ]

七、饼图:支出分类占比

7.1 普通饼图(空心)

当 按钮_饼图.被点击 时
  调用 ECharts1.饼图
    标题 = "本月支出分类"
    半径 = ["33%", "60%"]    // 空心饼图
    数据 = [
      创建字典(["value", 3500], ["name", "餐饮"]),
      创建字典(["value", 2000], ["name", "交通"]),
      创建字典(["value", 1500], ["name", "购物"]),
      创建字典(["value", 1000], ["name", "娱乐"]),
      创建字典(["value", 500], ["name", "其他"])
    ]

7.2 实心饼图

半径列表只设置一个值,就是实心饼图:
调用 ECharts1.饼图
  标题 = "本月支出分类"
  半径 = ["60%"]    // 只有一个值 = 实心饼图
  数据 = [...]

7.3 透明背景饼图

适合在自定义背景的 App 中使用:
设置 ECharts1.透明背景 = 真
调用 ECharts1.初始化(Web查看器_饼图)
调用 ECharts1.饼图(...)

八、仪表图:速度/进度仪表盘

8.1 速度仪表

当 按钮_仪表.被点击 时
  调用 ECharts1.仪表图
    起始角度 = 225
    结束角度 = -45
    最小值 = 0
    最大值 = 200
    值 = 85

8.2 角度参数说明

       225° (起点)



  180° ←──── 0°/360°


         ╲  (终点)
       -45° (= 315°)

8.3 圆角仪表(进度条样式)

如果起始角度设为 180,结束角度设为 0,就变成半圆形进度条:
调用 ECharts1.仪表图
  起始角度 = 180
  结束角度 = 0
  最小值 = 0
  最大值 = 100
  值 = 75    // 显示75%的进度

九、图表点击事件

所有图表都支持点击事件,可获取被点击的数据项:
当 ECharts1.被点击 时(图例, 标签, 值)
  // 图例:如"最高温"系列名
  // 标签:如"周三"横坐标
  // 值:如"32"数据值
  
  设置 标签_详情.文本 = 合并字符串(
    "系列: ", 图例, "\n",
    "时间: ", 标签, "\n",
    "数值: ", 值
  )
应用场景:
  • 折线图:点击某天查看详细数据
  • 饼图:点击某分类查看占比详情
  • 柱状图:点击某柱子查看具体数值

十、图表保存为图片

当 按钮_导出.被点击 时
  调用 ECharts1.保存图片("我的图表")

当 ECharts1.图片保存完成 时(图片路径)
  // 图片保存在 App 私有目录(ASD)
  // 可通过文件管理器查看
  调用 对话框1.显示消息对话框(
    合并字符串("已保存:\n", 图片路径),
    "导出成功", "确定")

十一、动态数据更新(实时刷新)

11.1 定时刷新折线图

初始化全局变量 刷新计数 = 0

当 Screen1.初始化 时
  设置 计时器1.启用计时 = 真
  设置 计时器1.计时间隔 = 5000  // 每5秒刷新一次

当 计时器1.计时 时
  设置 全局变量 刷新计数 = 全局变量 刷新计数 + 1
  // 模拟新数据
  初始化局部变量 新值 = 随机整数(20, 35)
  初始化局部变量 数据 = 选择列表项(全局变量 温度数据, 1)
  调用 追加列表项(数据, 新值)
  如果 列表长度(数据) > 12 则
    调用 删除列表项(数据, 1)
  调用 ECharts1.折线图("实时数据", ["当前值"], ["时间"], [数据], 假)

11.2 滑动手势切换图表

在列表选择器中选图表类型:
当 列表选择器1.完成选择 时(选择项, 选择索引)
  如果 选择项 = "折线图" 则
    调用 绘制折线图()
  否则如果 选择项 = "柱状图" 则
    调用 绘制柱状图()
  否则如果 选择项 = "饼图" 则
    调用 绘制饼图()
  否则如果 选择项 = "仪表图" 则
    调用 绘制仪表图()

十二、常见问题

Q1:图表显示不出来?

  • 确认 初始化折线图/柱状图/饼图 之前调用
  • 确认 Web 查看器高度 > 0(至少100像素)
  • 检查数据列表格式是否正确(注意中括号嵌套)

Q2:数据点太多卡顿?

  • 减少数据点数量(如每分钟最多显示60个点)
  • 设置 显示动画 = 假 可提升性能
  • 使用 平滑 = 假 减少渲染开销

Q3:如何显示多系列数据?

数据 = [
  [数据系列1],   // 第一个图例的数据
  [数据系列2],   // 第二个图例的数据
  [数据系列3]    // 第三个图例的数据
]
// 图例列表长度要和数据列表长度一致

Q4:饼图数据要字典格式,如何创建?

// 错误:普通列表
数据 = ["餐饮", 3500, "交通", 2000]

// 正确:字典列表
数据 = [
  创建字典(["value", 3500], ["name", "餐饮"]),
  创建字典(["value", 2000], ["name", "交通"])
]

Q5:Y轴数值被压缩得很小?

设置 Y轴最小值 = "0" 让图表从0开始:
设置 ECharts1.Y轴最小值 = "0"
调用 ECharts1.初始化(Web查看器1)

十三、ECharts3D 拓展(3D图表)

13.1 3D曲面

根据数学方程式绘制3D曲面:
当 按钮_3D曲面.被点击 时
  // 绘制 sin(x*π)*sin(y*π) 曲面
  调用 ECharts3D1.初始化(Web查看器_3D)
  调用 ECharts3D1.简单曲面与方程式
    标题 = "3D曲面演示"
    方程式JSON = `{"x":{"step":0.05},"y":{"step":0.05},"z":"function(x,y){if(Math.abs(x)<0.1&&Math.abs(y)<0.1){return '-';}return Math.sin(x*Math.PI)*Math.sin(y*Math.PI);}"}`

13.2 3D点阵曲面

当 按钮_3D点阵.被点击 时
  // 生成一个3D点阵数据
  初始化局部变量 点数据 = []
  对于 i 从 -5 到 5 步长 1
    对于 j 从 -5 到 5 步长 1
      初始化局部变量 z = 平方根(i*i + j*j)
      调用 追加列表项(点数据, 创建列表(i, j, z))
  
  调用 ECharts3D1.初始化(Web查看器_3D)
  调用 ECharts3D1.简单曲面
    标题 = "锥形曲面"
    数据 = 点数据

参考资料


文档版本:2026.03 | 作者:App Inventor 2 中文网 www.fun123.cn

参考资料与版权声明

原文来源

版权声明

本文档基于 MIT App Inventor 官方文档及社区资源整理,版权归原作者所有:
  • MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权
  • MIT App Inventor Community 帖子版权归原作者所有
本文档由 ai2claw 🐝 整理,仅供学习参考,如有侵权请联系删除。