LVGL图表仅显示整数,如何设置使其支持浮点数值显示?
LVGL图表显示浮点数值的解决方案
LVGL原生图表组件默认仅支持整数数值显示,直接通过lv_chart_set_axis_tick这类API无法设置浮点数刻度,因为相关参数均为整数类型。
你可以通过以下两种方式处理:
数值缩放转换:这是最常用的方案。将浮点数放大N倍转为整数传入图表,再通过自定义刻度标签回调将数值缩小N倍,格式化为浮点数显示。比如要显示步长0.1,就把所有数值乘以10转成整数,回调时再除以10并格式化为一位小数。
示例代码参考:
// 定义缩放因子 #define SCALE_FACTOR 10 // 传入数据时将浮点数转整数 float float_data = 3.2; lv_chart_set_next_value(chart, series, (int)(float_data * SCALE_FACTOR)); // 自定义轴标签绘制回调 static void custom_axis_label(lv_obj_t * axis, lv_coord_t value, lv_point_t * draw_pos) { char label_buf[16]; // 将整数转回浮点数并格式化 lv_snprintf(label_buf, sizeof(label_buf), "%.1f", (float)value / SCALE_FACTOR); lv_draw_label_dsc_t label_dsc; lv_draw_label_dsc_init(&label_dsc); lv_draw_label(axis, &label_dsc, draw_pos->x, draw_pos->y, label_buf, NULL); } // 设置轴刻度并绑定回调 lv_chart_set_axis_tick(chart, LV_CHART_AXIS_PRIMARY_Y, 10*SCALE_FACTOR, 5*SCALE_FACTOR, 5, 2, true, 50); lv_chart_set_axis_label_cb(chart, LV_CHART_AXIS_PRIMARY_Y, custom_axis_label);自定义绘制标签:如果不想做数值缩放,可在图表绘制完成后,手动计算刻度位置并绘制浮点标签。但这种方式需要自行处理坐标计算,相对繁琐,不如缩放方案高效。
综上,数值缩放+自定义标签回调是LVGL社区处理浮点数图表的主流方案,简单且高效。
内容的提问来源于stack exchange,提问作者halo
相关产品推荐
相关产品推荐

