You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用For循环批量创建对象添加至GraphView图表失败求助

问题分析与解决方案

嘿,我一眼就揪出你代码里的小问题啦!你在循环里踩了个很容易犯的坑:

每次循环你都重新创建了一个全新的LineGraphSeries对象,而且每次只给这个series塞单个DataPoint。最后你把循环结束时的最后一个series加到图表上,这就导致图表里只有孤零零的最后一个数据点——自然看不到完整的线条,只剩坐标轴啦!

正确的实现方式

方法一:先构建完整数据集再初始化series

先创建一个和数据长度匹配的DataPoint数组,把所有日期和利润数据都填充进去,再用这个完整数组一次性初始化series:

GraphView graph = (GraphView) findViewById(R.id.graph);
// 创建对应长度的DataPoint数组
DataPoint[] dataPoints = new DataPoint[Profit.length];
for(int i = 0; i < Profit.length; i++){
    Date date = getDate()[i];
    dataPoints[i] = new DataPoint(date, Profit[i]);
}
// 用完整数据集初始化series
LineGraphSeries<DataPoint> series = new LineGraphSeries<>(dataPoints);
graph.addSeries(series);

方法二:用appendData动态添加数据点

如果数据量较大或者需要动态追加数据,可以先初始化空的series,然后逐个添加数据点:

GraphView graph = (GraphView) findViewById(R.id.graph);
// 初始化空的series
LineGraphSeries<DataPoint> series = new LineGraphSeries<>();
for(int i = 0; i < Profit.length; i++){
    Date date = getDate()[i];
    // 逐个添加数据点,第三个参数控制最大显示的数据点数量
    series.appendData(new DataPoint(date, Profit[i]), true, Profit.length);
}
graph.addSeries(series);

额外优化建议

  • 务必确保getDate()返回的数组长度和Profit数组完全一致,避免出现数组越界异常。
  • 如果是日期类型的X轴,建议手动设置坐标轴范围,让图表完整展示所有数据:
    graph.getViewport().setXAxisBoundsManual(true);
    graph.getViewport().setMinX(dataPoints[0].getX());
    graph.getViewport().setMaxX(dataPoints[dataPoints.length-1].getX());
    // 开启滚动和缩放功能,方便查看数据细节
    graph.getViewport().setScrollable(true);
    graph.getViewport().setScalable(true);
    

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

火山引擎 最新活动