在单个 SfCartesianChart 中渲染 1000 个 LineSeries,每个 LineSeries 具有 10000 个数据点。
整个应用程序被阻塞,直到渲染完成。
渲染速度真的很慢。整个应用程序速度变慢。
任何人都可以帮我解决这个问题吗?我附上了示例代码片段以供参考。
Ex:
SfCartesianChart(
primaryXAxis: const CategoryAxis(),
primaryYAxis: NumericAxis(
axisLabelFormatter: (AxisLabelRenderDetails args) {
late String text;
text = args.text;
if (double.tryParse(args.text)! < 0) {
text = 'OFF';
}
return ChartAxisLabel(text, TextStyle());
},
),
series: [
for (int index = 0; index < assemblylineDatas.length; index++)
FastLineSeries<ChartData, String>(
animationDuration: 0,
color: assemblylineDatas[index ].color,
width: 1.5,
dataSource: assemblylineDatas[index].assemblylineMappedValue,
xValueMapper: (ChartData data, i) => data.xValue,
yValueMapper: (ChartData data, i) => data.yValue,
),
],
);
在单个图表中处理如此大的数据集。应用程序性能不应受到影响。
查询:当使用 1000 个 FastLineSeries,每个 FastLineSeries 有 10000 个数据点时,完全减慢:
当有 1000 个 FastLineSeries,每个 FastLineSeries 有 10000 个数据点时,大约渲染 1000 万个数据点。因此,PlotArea 几乎会被 FastLineSeries 填满,并且没有空间清晰地可视化该系列,并且需要一些时间才能完成 1000 万个数据点。所以,我们建议您根据自己的需求按需加载系列。
axisLabel定制建议:
我们注意到您在 axisLabelFormatter 回调中将文本从 String 转换为 double 来自定义 y 轴标签,这里我们建议您使用 AxisLabelRenderDetails 中的值,而不是将文本值转换为 double 。
当需要绘制大量数据时,我们有以下共同因素可用于提高图表的性能。
·在 initState 方法本身中加载并存储所需的数据点,然后将 dataSource 设置为图表系列。
·使用 NumericAxis 或 DateTimeAxis 而不是 CategoryAxis 和 DateTimeCategoryAxis。
·当线系列中有大量点需要加载时,可以使用FastLineSeries代替LineSeries。
·当数据点较多时,您可以使用轨迹球查看点信息,而不是启用数据标记和数据标签。
·将系列animationDuration设置为0以在加载大量数据点时禁用动画。
·更新动态数据点时使用 updateDataSource 方法,而不是调用 setState。有关更多详细信息,请参阅 ug - https://help.syncfusion.com/flutter/cartesian-charts/methods#updatedatasource。
·在渲染大数据点时使用按需加载,可用于在图表中拖动可见范围到达末尾时将更多数据加载到图表中。有关更多详细信息,请参阅ug - https://help.syncfusion.com/flutter/cartesian-charts/on-demand-loading
·使用 NumericAxis 或 DateTimeAxis 中的 autoScrollingDelta 属性,显示 SfCartesianChart 中始终可见的数据点数量。通过使用此功能,您可以通过在 ZoomPanBehavior 中将enablePanning 属性设置为 true 来查看剩余的数据点。有关更多详细信息,请参阅ug - https://help.syncfusion.com/flutter/cartesian-charts/axis-customization#auto-scrolling
如果您仍想在 SfCartesianChart 中加载 1000 个 FastLineSeries,每个 FastLineSeries 包含 10000 个数据点,我们要求您分享有关您想要在项目中实现的目标以及您的需求的用例的更多详细信息。这将有助于我们更有效地为您提供帮助。