首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除MPAndroidChart中的旧数据?

如何删除MPAndroidChart中的旧数据?
EN

Stack Overflow用户
提问于 2017-06-14 06:44:59
回答 4查看 5.4K关注 0票数 0

嗨,这是我的代码,但不工作(最新版本的图书馆)

代码语言:javascript
运行
复制
LineData dataChart = mainChart.getData();

    if (dataChart != null) {

        LineDataSet set = (LineDataSet) dataChart.getDataSetByIndex(0);
        if (set == null) {
            set = (LineDataSet) createSet(ColorTemplate.rgb(colorChart), ColorTemplate.rgb(colorFill));
            dataChart.addDataSet(set);
        }



        dataChart.addEntry(new Entry(set.getEntryCount(), sensorEvent.values[2]), 0);
        dataChart.notifyDataChanged();

        if(set.getEntryCount() == 20) {
            set.removeFirst();
        }

        // let the chart know it's data has changed
        mainChart.notifyDataSetChanged();
        // limit the number of visible entries
        mainChart.setVisibleXRangeMaximum(20);
        mainChart.moveViewToX(dataChart.getEntryCount());

    }

`此鳕鱼的输出:不正确

但当我改变我的密码:

代码语言:javascript
运行
复制
LineData dataChart = mainChart.getData();

    if (dataChart != null) {

        LineDataSet set = (LineDataSet) dataChart.getDataSetByIndex(0);
        if (set == null) {
            set = (LineDataSet) createSet(ColorTemplate.rgb(colorChart), ColorTemplate.rgb(colorFill));
            dataChart.addDataSet(set);
        }



        dataChart.addEntry(new Entry(set.getEntryCount(), sensorEvent.values[2]), 0);
        dataChart.notifyDataChanged();

        // let the chart know it's data has changed
        mainChart.notifyDataSetChanged();
        // limit the number of visible entries
        mainChart.setVisibleXRangeMaximum(300);
        mainChart.moveViewToX(dataChart.getEntryCount());

    }

而且输出是正确的,那么我应该如何从图表中删除旧数据呢?正确,但我要删除旧数据

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-24 06:49:56

问题解决了。我应该加上这几行。

代码语言:javascript
运行
复制
if(set.getEntryCount() == MAX_ENTRIES) {
            set.removeFirst();
            // change Indexes - move to beginning by 1
            for (Entry entry : set.getValues() )
                entry.setX(entry.getX() - 1);
}
票数 3
EN

Stack Overflow用户

发布于 2017-06-18 16:34:09

我也遇到了这个问题,我想在LineChart中显示最后5个条目,所以当数据开始时,我调用addXValue()和addEntry().Since条目计数为5,我调用removeXValue(0)和removeEntry(0)来删除最古老的条目,但是LineChart非常奇怪:实际上条目计数是5,但最后只有一个条目,现在我不知道如何处理it.Here是我的代码:

代码语言:javascript
运行
复制
private static final int VISIBLE_NUM = 5;

private void refreshData(float value) {
    LineData data = mChart.getData();
    if (data != null) {
        LineDataSet set = data.getDataSetByIndex(0);

        if (set == null) {

            set = new LineDataSet(null, "DataSet");
            set.enableDashedLine(10f, 5f, 0f);
            set.setColor(Color.BLUE);
            set.setCircleColor(Color.GREEN);
            set.setLineWidth(1f);
            set.setCircleSize(3f);
            set.setDrawCircleHole(false);
            set.setValueTextSize(9f);
            set.setFillAlpha(65);
            set.setFillColor(Color.BLACK);

            data.addDataSet(set);
        }

        if(set.getEntryCount() == VISIBLE_NUM) {
            data.removeXValue(0);
            set.removeEntry(0);
        }

        data.addXValue(new SimpleDateFormat("HH:mm:ss")
                .format(new Date(System.currentTimeMillis())));
        data.addEntry(new Entry(value, set.getEntryCount()), 0);

        mChart.notifyDataSetChanged();
        //mChart.setVisibleXRange(VISIBLE_NUM-1);
        //mChart.moveViewToX(data.getXValCount() - VISIBLE_NUM);
        mChart.invalidate();
    }

}
票数 1
EN

Stack Overflow用户

发布于 2019-01-15 11:02:39

我在以前的回答中发现了一些问题。所以我尝试了不同的方法。

优点: 1.数据集的输入计数保持不变。2.实时心电图图

代码语言:javascript
运行
复制
private long removalCounter = 0;
private static final int VISIBLE_COUNT = 300;

private void addNewEntry(double value) {

    LineData data = lineChart.getData();

    if (data != null) {

        ILineDataSet set = data.getDataSetByIndex(0);

        if (set == null) {
            set = createDataSet();
            data.addDataSet(set);
        }

        data.addEntry(new Entry(set.getEntryCount() + removalCounter, (float) value), 0);
        data.notifyDataChanged();

        // limit the number of visible entries
        lineChart.setVisibleXRangeMaximum(VISIBLE_COUNT);

        // move to the latest entry
        lineChart.moveViewToX(set.getEntryCount());

        //remove entry which is out of visible range 
        if (set.getEntryCount() > VISIBLE_COUNT){
            data.removeEntry(removalCounter, 0);
            removalCounter++;
        }
        lineChart.notifyDataSetChanged();
    }
}


private LineDataSet createDataSet() {

    LineDataSet set = new LineDataSet(null, "real_time");
    set.setAxisDependency(YAxis.AxisDependency.LEFT);
    set.setColor(Color.RED);
    set.setLineWidth(1f);
    set.setDrawCircles(false);
    set.setHighlightEnabled(false);
    set.setDrawValues(false);
    set.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);
    set.setCubicIntensity(0.2f);
    return set;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44537353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档