M5Chart
M5Chart 是一个多功能的图表组件,允许用户创建各种类型的图表,包括折线图和柱状图。它提供了数据可视化、自定义和用户界面交互等功能。
UiFlow2 应用示例
温度折线图
在 UiFlow2 中打开 cores3_chart_line_example.m5f2 项目。
此示例演示如何创建折线图来可视化随时间变化的温度数据。
UiFlow2 代码块:
示例输出:
显示温度数据的折线图,带有标记的坐标轴和网格线。
MicroPython 应用示例
温度折线图
此示例演示如何通过编程方式创建折线图来可视化温度数据。
MicroPython 代码块:
# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD # # SPDX-License-Identifier: MIT import os, sys, io import M5 from M5 import * import m5ui import lvgl as lv from hardware import Pin from hardware import I2C from unit import ENVUnit import time page0 = None chart0 = None i2c0 = None series_temp = None series_humi = None env3_0 = None def setup(): global page0, chart0, i2c0, series_temp, series_humi, env3_0 M5.begin() Widgets.setRotation(1) m5ui.init() page0 = m5ui.M5Page(bg_c=0xFFFFFF) chart0 = m5ui.M5Chart( x=43, y=40, w=240, h=160, chart_type=lv.chart.TYPE.LINE, point_num=10, hdiv=3, vdiv=5, bg_radius=7, bg_c=0xFFFFFF, border_c=0xE0E0E0, border_w=2, parent=page0, ) chart0.y_axis1_init( min_value=0, max_value=50, major_ticks=3, major_tick_len=10, minor_ticks=2, minor_tick_len=5, label_show=True, ) chart0.y_axis2_init( min_value=0, max_value=100, major_ticks=3, major_tick_len=10, minor_ticks=2, minor_tick_len=5, label_show=True, ) i2c0 = I2C(0, scl=Pin(1), sda=Pin(2), freq=100000) env3_0 = ENVUnit(i2c=i2c0, type=3) page0.screen_load() series_temp = chart0.add_series(0xFF0000, lv.chart.AXIS.PRIMARY_Y) series_humi = chart0.add_series(0x009900, lv.chart.AXIS.SECONDARY_Y) chart0.set_update_mode(lv.chart.UPDATE_MODE.SHIFT) chart0.align_to(page0, lv.ALIGN.CENTER, 0, 0) chart0.set_style_size(0, 0, lv.PART.INDICATOR | lv.STATE.DEFAULT) def loop(): global page0, chart0, i2c0, series_temp, series_humi, env3_0 M5.update() chart0.set_next_value(series_temp, int(env3_0.read_temperature())) chart0.set_next_value(series_humi, int(env3_0.read_humidity())) time.sleep(1) if __name__ == "__main__": try: setup() while True: loop() except (Exception, KeyboardInterrupt) as e: try: m5ui.deinit() from utility import print_error_msg print_error_msg(e) except ImportError: print("please update to latest firmware")
示例输出:
显示温度数据的折线图,带有标记的坐标轴和网格线。
API参考
M5Chart
- class m5ui.chart.M5Chart(*args, **kwargs)
基类:
chart创建一个图表对象。
- 参数:
x (int) – 图表位置的 X 坐标。默认为 0。
y (int) – 图表位置的 Y 坐标。默认为 0。
w (int) – 图表的宽度。默认为 200。
h (int) – 图表的高度。默认为 100。
chart_type (int) – 图表的类型。lv.chart.TYPE.LINE、lv.chart.TYPE.BAR 等。默认为 lv.chart.TYPE.LINE。
point_num (int) – 图表中的点数。默认为 10。
hdiv (int) – 水平分割线的数量。默认为 0(无线条)。
vdiv (int) – 垂直分割线的数量。默认为 0(无线条)。
bg_radius (int) – 背景圆角半径。默认为 7。
bg_c (int) – 十六进制格式的背景颜色。默认为 0xFFFFFF(白色)。
border_c (int) – 十六进制格式的边框颜色。默认为 0xE0E0E0(浅灰色)。
border_w (int) – 边框宽度。默认为 2。
parent (lv.obj) – 父 LVGL 对象。默认为活动屏幕。
- set_flag(flag, value)
在对象上设置标志。如果
value为 True,则添加标志;如果为 False,则移除标志。UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_flag(lv.obj.FLAG.HIDDEN, True)
- toggle_flag(flag)
切换对象上的标志。如果标志已设置,则将其移除;如果未设置,则添加它。
- 参数:
flag (int) – 要切换的标志。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.toggle_flag(lv.obj.FLAG.HIDDEN)
- add_event_cb(handler, event, user_data)
为图表添加事件回调。当指定的事件发生时,将调用回调函数。
- 参数:
handler (function) – 要调用的回调函数。
event (int) – 要监听的事件。
user_data (Any) – 传递给回调的可选用户数据。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
def chart_0_value_changed_event(event_struct): global page0, button0 print("value changed) def chart_0_event_handler(event_struct): global page0, button0 event = event_struct.code obj = event_struct.get_target_obj() if event == lv.EVENT.VALUE_CHANGED: chart_0_value_changed_event(event_struct) return chart_0.add_event_cb(chart_0_event_handler, lv.EVENT.ALL, None)
- set_bg_color(color, opa, part)
设置图表的背景颜色。
- 参数:
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_bg_color(lv.color_hex(0xFFFFFF), 255, lv.PART.MAIN | lv.STATE.DEFAULT)
- set_border_color(color, opa, part)
设置图表的边框颜色。
- 参数:
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_border_color(lv.color_hex(0x2196F3), 255, lv.PART.MAIN | lv.STATE.DEFAULT)
- set_style_border_width(width, part)
设置图表的宽度。
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_style_border_width(2, lv.PART.MAIN | lv.STATE.DEFAULT)
- set_type(chart_type)
设置图表的类型。
- 参数:
chart_type (int) – 图表的类型(例如 lv.chart.TYPE.LINE、lv.chart.TYPE.BAR)。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_type(lv.chart.TYPE.LINE)
- set_point_count(count)
设置图表中的点数。
- 参数:
count (int) – 点的数量。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_point_count(10)
- set_update_mode(mode)
设置图表的更新模式。
- 参数:
mode (int) – 更新模式(例如 lv.chart.UPDATE_MODE.CIRCULAR、lv.chart.UPDATE_MODE.SHIFT)。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_update_mode(lv.chart.UPDATE_MODE.CIRCULAR)
- set_div_line_count(hdiv, vdiv)
设置图表上的分割线数量。
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_div_line_count(5, 5)
- get_type()
获取图表的类型。
- 返回:
图表的类型。
UiFlow2 代码块:

MicroPython 代码块:
chart_type = chart_0.get_type()
- get_point_count()
获取图表中的点数。
- 返回:
点的数量。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
point_count = chart_0.get_point_count()
- remove_series(series)
从图表中移除一个数据序列。
- 参数:
series (lv.chart.Series) – 要移除的数据序列。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.remove_series(series_0)
- hide_series(series)
隐藏图表上的数据序列。
- 参数:
series (lv.chart.Series) – 要隐藏的数据序列。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.hide_series(series_0)
- set_next_value(series, value)
根据更新模式策略设置下一个点的 Y 值。
- 参数:
series (lv.chart.Series) – 要更新的数据序列。
value (int) – 要设置的 Y 值。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_next_value(series_0, 50)
- get_pressed_point()
获取图表上被按下的点的索引。
- 返回:
被按下的点的索引。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
pressed_point_index = chart_0.get_pressed_point()
- set_style_radius(radius, part)
设置图表的圆角半径。
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_style_radius(10, lv.PART.INDICATOR | lv.STATE.DEFAULT)
- set_style_size(w, h, part)
设置图表的大小。
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_style_size(0, 0, lv.PART.INDICATOR | lv.STATE.DEFAULT)
- set_pos(x, y)
设置图表的位置。
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_pos(100, 100)
- set_x(x)
设置图表的 x 坐标。
- 参数:
x (int) – 图表的 x 坐标。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_x(100)
- set_y(y)
设置图表的 y 坐标。
- 参数:
y (int) – 图表的 y 坐标。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_y(100)
- align_to(obj, align, x, y)
将图表对齐到另一个对象。
- 参数:
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.align_to(page_0, lv.ALIGN.CENTER, 0, 0)
- set_size(width, height)
设置图表的大小。
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_size(200, 30)
- set_width(width)
设置图表的宽度。
- 参数:
width (int) – 图表的宽度。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_width(200)
- get_width()
获取图表的宽度。
- 返回:
图表的宽度。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
width = chart_0.get_width()
- set_height(height)
设置图表的高度。
- 参数:
height (int) – 图表的高度。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_height(30)
- get_height()
获取图表的高度。
- 返回:
图表的高度。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
height = chart_0.get_height()
- x_axis_init(width=lvgl.pct, height=50, mode=lvgl.scale.MODE.HORIZONTAL_BOTTOM, min_value=0, max_value=100, major_ticks=5, major_tick_len=10, minor_ticks=2, minor_tick_len=5, label_show=True)
初始化 X 轴。
- 参数:
width (int) – X 轴的宽度。默认为 lv.pct(100)。
height (int) – X 轴的高度。默认为 50。
mode (int) – X 轴的模式。默认为 lv.scale.MODE.HORIZONTAL_BOTTOM。
min_value (int) – X 轴的最小值。默认为 0。
max_value (int) – X 轴的最大值。默认为 100。
major_ticks (int) – X 轴上的主刻度数量。默认为 5。
major_tick_len (int) – 主刻度的长度。默认为 10。
minor_ticks (int) – 主刻度之间的次刻度数量。默认为 2。
minor_tick_len (int) – 次刻度的长度。默认为 5。
label_show (bool) – 是否在 X 轴上显示标签。默认为 True。
- y_axis1_init(width=50, height=lvgl.pct, mode=lvgl.scale.MODE.VERTICAL_LEFT, min_value=0, max_value=100, major_ticks=5, major_tick_len=10, minor_ticks=2, minor_tick_len=5, label_show=True)
初始化主 Y 轴。
- 参数:
width (int) – Y 轴的宽度。默认为 50。
height (int) – Y 轴的高度。默认为 lv.pct(100)。
mode (int) – Y 轴的模式。默认为 lv.scale.MODE.VERTICAL_LEFT。
min_value (int) – Y 轴的最小值。默认为 0。
max_value (int) – Y 轴的最大值。默认为 100。
major_ticks (int) – Y 轴上的主刻度数量。默认为 5。
major_tick_len (int) – 主刻度的长度。默认为 10。
minor_ticks (int) – 主刻度之间的次刻度数量。默认为 2。
minor_tick_len (int) – 次刻度的长度。默认为 5。
label_show (bool) – 是否在 Y 轴上显示标签。默认为 True。
- y_axis2_init(width=50, height=lvgl.pct, mode=lvgl.scale.MODE.VERTICAL_RIGHT, min_value=0, max_value=100, major_ticks=5, major_tick_len=10, minor_ticks=2, minor_tick_len=5, label_show=True)
初始化次 Y 轴。
- 参数:
width (int) – Y 轴的宽度。默认为 50。
height (int) – Y 轴的高度。默认为 lv.pct(100)。
mode (int) – Y 轴的模式。默认为 lv.scale.MODE.VERTICAL_RIGHT。
min_value (int) – Y 轴的最小值。默认为 0。
max_value (int) – Y 轴的最大值。默认为 100。
major_ticks (int) – Y 轴上的主刻度数量。默认为 5。
major_tick_len (int) – 主刻度的长度。默认为 10。
minor_ticks (int) – 主刻度之间的次刻度数量。默认为 2。
minor_tick_len (int) – 次刻度的长度。默认为 5。
label_show (bool) – 是否在 Y 轴上显示标签。默认为 True
- set_axis_range(axis, min_value, max_value)
设置指定坐标轴的范围。
- 参数:
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_axis_range(lv.chart.AXIS.PRIMARY_Y, 0, 200)
- add_series(color, axis)
向图表添加数据序列。
- 参数:
UiFlow2 代码块:

MicroPython 代码块:
series_0 = chart_0.add_series(0xFF0000, lv.chart.AXIS.PRIMARY_Y)
- set_series_color(series, color)
设置数据序列的颜色。
- 参数:
series – 要设置颜色的序列。
color (int) – 十六进制格式的序列颜色。
UiFlow2 代码块:

MicroPython 代码块:
chart_0.set_series_color(series_0, 0x00FF00)
- get_series_color(series)
获取数据序列的颜色。
- 参数:
series – 要获取颜色的序列。
- 返回:
十六进制格式的序列颜色。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
color = chart_0.get_series_color(series_0)

