You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Syncfusion Flutter Widgets实现实时函数图表X轴自动滚动

问题描述

计划绘制Arduino UNO通过HC-05蓝牙模块传输的实时数据,目前先用随机数测试图表运行效果。需求为图表绘制满300个点后,X轴最左侧初始数值自动向前递进,实现滚动效果;当前X轴左端始终固定为0,持续绘图后显示效果不符合预期。

问题原因

当前代码中图表X轴的最小值被固定为0,没有随新增数据动态调整显示区间,导致旧数据不断压缩在左侧,无法实现滚动效果。

解决步骤
  • 维护两个变量:已绘制总点数totalPoints、X轴最小显示值xAxisMin,初始值均为0。
  • 每次新增数据点时,totalPoints自增1,若totalPoints超过300,将xAxisMin赋值为totalPoints - 300,保证X轴始终显示最新的300个点的区间。
  • 修改图表配置的X轴参数,将minX绑定到xAxisMin,maxX绑定为xAxisMin + 299,让显示区间随数据动态更新。
  • 可选优化:若不需要留存历史全量数据,可在点数超过300时移除数据列表最开头的旧数据,此时X轴区间可直接固定为0~299,旧数据移除后新点追加在末尾,同样能实现滚动效果,还能降低内存占用。
核心代码示例
// 页面类内定义变量
int totalPoints = 0;
int xAxisMin = 0;
List<FlSpot> dataPoints = [];

// 新增数据点逻辑
void addNewData(double yValue) {
  totalPoints += 1;
  dataPoints.add(FlSpot((totalPoints - 1).toDouble(), yValue));

  if (totalPoints > 300) {
    xAxisMin = totalPoints - 300;
    // 不需要留存历史数据时可取消下面的注释
    // dataPoints.removeAt(0);
  }
  setState(() {});
}

// 图表配置示例(以fl_chart库为例)
LineChart(
  LineChartData(
    minX: xAxisMin.toDouble(),
    maxX: (xAxisMin + 299).toDouble(),
    // 其余Y轴、样式等配置保持原有逻辑不变
  )
)

内容的提问来源于stack exchange,提问作者alx06

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:15:02