图表控件¶
概述¶
图表控件用于数据可视化展示。EmbeddedGUI 提供了四种图表:ChartLine 折线图、ChartBar 柱状图、ChartScatter 散点图和 ChartPie 饼图。前三种基于坐标轴(Axis)体系,共享数据系列、坐标轴配置、图例和缩放等能力;ChartPie 使用独立的饼图切片数据模型。
当前在线示例统一由 HelloChart 承载,打开页面后可在同一 demo 里切换 line / scatter / bar / pie 四页:
公共数据结构¶
所有坐标轴类图表共享以下数据结构:
// 数据点
typedef struct egui_chart_point
{
int16_t x;
int16_t y;
} egui_chart_point_t;
// 数据系列(折线/散点/柱状)
typedef struct egui_chart_series
{
const egui_chart_point_t *points;
uint8_t point_count;
egui_color_t color;
const char *name; // 图例名称, NULL = 不显示
} egui_chart_series_t;
// 饼图切片
typedef struct egui_chart_pie_slice
{
uint16_t value;
egui_color_t color;
const char *name; // 图例名称, NULL = 不显示
} egui_chart_pie_slice_t;
坐标轴配置¶
typedef struct egui_chart_axis_config
{
int16_t min_value;
int16_t max_value;
int16_t tick_step; // 0 = 自动计算
uint8_t tick_count; // tick_step==0 时使用, 默认 5
uint8_t show_grid : 1;
uint8_t show_labels : 1;
uint8_t show_axis : 1;
uint8_t is_categorical : 1; // 1 = 分类轴(柱状图)
const char *title; // NULL = 不显示
} egui_chart_axis_config_t;
图例位置¶
常量 |
说明 |
|---|---|
|
不显示图例 |
|
图例在顶部 |
|
图例在底部 |
|
图例在右侧 |
坐标轴类图表公共 API¶
以下 API 通过宏映射,ChartLine/ChartBar/ChartScatter 均可使用(将前缀替换为对应控件名即可):
函数 |
说明 |
|---|---|
|
设置数据系列 |
|
设置 X 轴范围 |
|
设置 Y 轴范围 |
|
设置 X 轴完整配置 |
|
设置 Y 轴完整配置 |
|
设置图例位置 |
|
设置颜色方案 |
|
设置字体 |
缩放 API (需开启 MULTI_TOUCH)¶
函数 |
说明 |
|---|---|
|
启用/禁用缩放 |
|
放大(双轴) |
|
缩小(双轴) |
|
重置缩放(双轴) |
|
仅 X 轴放大 |
|
仅 X 轴缩小 |
|
仅 Y 轴放大 |
|
仅 Y 轴缩小 |
ChartLine¶
折线图控件,支持多条数据系列、数据点标记、线宽设置。
效果展示¶
专有 API¶
函数 |
说明 |
|---|---|
|
初始化 ChartLine |
|
使用参数初始化 |
|
设置线宽(默认 2) |
|
设置数据点半径(默认 3) |
参数宏¶
EGUI_VIEW_CHART_LINE_PARAMS_INIT(name, x, y, w, h);
代码示例¶
static egui_view_chart_line_t line_chart;
static const egui_chart_point_t temp_data[] = {
{0, 22}, {1, 24}, {2, 23}, {3, 26},
{4, 28}, {5, 25}, {6, 23},
};
static const egui_chart_series_t series[] = {
{temp_data, 7, EGUI_COLOR_MAKE(0x00, 0xAA, 0xFF), "Temp"},
};
EGUI_VIEW_CHART_LINE_PARAMS_INIT(lc_params, 0, 0, 220, 160);
void init_ui(egui_core_t *core)
{
egui_view_chart_line_init_with_params(
EGUI_VIEW_OF(&line_chart), core, &lc_params);
egui_view_chart_line_set_series(
EGUI_VIEW_OF(&line_chart), series, 1);
egui_view_chart_line_set_axis_x(
EGUI_VIEW_OF(&line_chart), 0, 6, 1);
egui_view_chart_line_set_axis_y(
EGUI_VIEW_OF(&line_chart), 20, 30, 2);
egui_view_chart_line_set_legend_pos(
EGUI_VIEW_OF(&line_chart), EGUI_CHART_LEGEND_TOP);
egui_view_chart_line_set_line_width(
EGUI_VIEW_OF(&line_chart), 2);
egui_view_chart_line_set_point_radius(
EGUI_VIEW_OF(&line_chart), 3);
egui_core_add_user_root_view(core, EGUI_VIEW_OF(&line_chart));
}
ChartBar¶
柱状图控件,支持多组数据系列并排显示,可设置柱间距。
效果展示¶
专有 API¶
函数 |
说明 |
|---|---|
|
初始化 ChartBar |
|
使用参数初始化 |
|
设置柱间距(默认 2) |
参数宏¶
EGUI_VIEW_CHART_BAR_PARAMS_INIT(name, x, y, w, h);
代码示例¶
static egui_view_chart_bar_t bar_chart;
static const egui_chart_point_t sales_data[] = {
{0, 120}, {1, 200}, {2, 150}, {3, 180},
};
static const egui_chart_series_t bar_series[] = {
{sales_data, 4, EGUI_COLOR_MAKE(0x44, 0xBB, 0x55), "Sales"},
};
EGUI_VIEW_CHART_BAR_PARAMS_INIT(bc_params, 0, 0, 220, 160);
void init_ui(egui_core_t *core)
{
egui_view_chart_bar_init_with_params(
EGUI_VIEW_OF(&bar_chart), core, &bc_params);
egui_view_chart_bar_set_series(
EGUI_VIEW_OF(&bar_chart), bar_series, 1);
egui_view_chart_bar_set_axis_x(
EGUI_VIEW_OF(&bar_chart), 0, 3, 1);
egui_view_chart_bar_set_axis_y(
EGUI_VIEW_OF(&bar_chart), 0, 250, 50);
egui_view_chart_bar_set_bar_gap(
EGUI_VIEW_OF(&bar_chart), 4);
egui_view_chart_bar_set_legend_pos(
EGUI_VIEW_OF(&bar_chart), EGUI_CHART_LEGEND_BOTTOM);
egui_core_add_user_root_view(core, EGUI_VIEW_OF(&bar_chart));
}
ChartScatter¶
散点图控件,以圆点形式展示数据分布,支持设置点半径。
效果展示¶
专有 API¶
函数 |
说明 |
|---|---|
|
初始化 ChartScatter |
|
使用参数初始化 |
|
设置点半径(默认 3) |
参数宏¶
EGUI_VIEW_CHART_SCATTER_PARAMS_INIT(name, x, y, w, h);
代码示例¶
static egui_view_chart_scatter_t scatter_chart;
static const egui_chart_point_t scatter_data[] = {
{10, 50}, {20, 80}, {35, 60}, {45, 90},
{55, 40}, {70, 75}, {85, 55}, {95, 85},
};
static const egui_chart_series_t scatter_series[] = {
{scatter_data, 8, EGUI_COLOR_MAKE(0xFF, 0x66, 0x00), "Samples"},
};
EGUI_VIEW_CHART_SCATTER_PARAMS_INIT(sc_params, 0, 0, 220, 160);
void init_ui(egui_core_t *core)
{
egui_view_chart_scatter_init_with_params(
EGUI_VIEW_OF(&scatter_chart), core, &sc_params);
egui_view_chart_scatter_set_series(
EGUI_VIEW_OF(&scatter_chart), scatter_series, 1);
egui_view_chart_scatter_set_axis_x(
EGUI_VIEW_OF(&scatter_chart), 0, 100, 20);
egui_view_chart_scatter_set_axis_y(
EGUI_VIEW_OF(&scatter_chart), 0, 100, 20);
egui_view_chart_scatter_set_point_radius(
EGUI_VIEW_OF(&scatter_chart), 4);
egui_core_add_user_root_view(core, EGUI_VIEW_OF(&scatter_chart));
}
ChartPie¶
饼图控件,以扇形展示各部分占比。使用独立的切片数据模型,不依赖坐标轴体系。
效果展示¶
API¶
函数 |
说明 |
|---|---|
|
初始化 ChartPie |
|
使用参数初始化 |
|
设置饼图切片数据 |
|
设置图例位置 |
|
设置背景色和文本色 |
|
设置字体 |
参数宏¶
EGUI_VIEW_CHART_PIE_PARAMS_INIT(name, x, y, w, h);
代码示例¶
static egui_view_chart_pie_t pie_chart;
static const egui_chart_pie_slice_t slices[] = {
{40, EGUI_COLOR_MAKE(0xFF, 0x44, 0x44), "Code"},
{25, EGUI_COLOR_MAKE(0x44, 0xBB, 0x55), "Test"},
{20, EGUI_COLOR_MAKE(0x33, 0x99, 0xFF), "Docs"},
{15, EGUI_COLOR_MAKE(0xFF, 0xAA, 0x00), "Other"},
};
EGUI_VIEW_CHART_PIE_PARAMS_INIT(pc_params, 0, 0, 220, 180);
void init_ui(egui_core_t *core)
{
egui_view_chart_pie_init_with_params(
EGUI_VIEW_OF(&pie_chart), core, &pc_params);
egui_view_chart_pie_set_slices(
EGUI_VIEW_OF(&pie_chart), slices, 4);
egui_view_chart_pie_set_legend_pos(
EGUI_VIEW_OF(&pie_chart), EGUI_CHART_LEGEND_RIGHT);
egui_core_add_user_root_view(core, EGUI_VIEW_OF(&pie_chart));
}
配置选项¶
宏 |
说明 |
|---|---|
|
启用坐标轴类图表的缩放和平移手势 |