android - MPAndroidChart Linechart 未连接的数据点

标签 android mpandroidchart

我正在调查 MPAndroidChart 在我公司的 Android 和 iOS 应用程序中的使用,我发现了一个问题,我需要一个解决方案才能使用这个框架。

应用程序将主要使用折线图功能,提供的数据可以包含 NULL 条目。我看过其他讨论此事的帖子,显然还没有显示 NULL 值的解决方案。 MPAndroidChart with null values

作者建议简单地不要将数据点添加到集合中,但在我的例子中,如果有两个以上连续的 NULL 值(或者表示它)即图形在两点之间不连续,其间有 NULL 值。有什么方法可以用这个框架完成这个任务吗?

我一直在研究将数据点分离到不同数据集中的可能性,但这似乎是一种 hack。

谢谢!

数据集示例:

[1 2 10 NULL NULL NULL 20 25 30]
The Line must NOT connect the numbers 10 and 20.

最佳答案

这就是我最终想出的办法来解决这个问题 - 对于 future 的任何人。它遍历并在数据集中创建新条目,直到它遇到空值,然后它使用在条目构造函数中使用 bool 值的“假”条目创建数据集。 bool 值可以从

"entry.getData()"

然后您可以使用它将该数据集设置为不可见

"mLineDataSet.setVisible(false);"

注意:不要尝试将数据集颜色设置为透明 - 该库有一个错误,如果某些条目为空,则图形甚至不会出现。

    private void createDataSets() {
          for (int index = 0; index < mGraph.getGraphDataSets().size(); index++) {
                    lastIndexCreated = 0;
                    final GraphDataSet mDataSet = mGraph.getGraphDataSets().get(index);
                    final ArrayList<Entry> mEntries = getEntries(mDataSet.getYValues(), lastIndexCreated);
                    final LineDataSet mLineDataSet = getDataSet(mEntries, mDataSet, color);
                    mGraphLineData.addDataSet(mLineDataSet);
                    lastIndexCreated = mEntries.size() - 1;
                    while (lastIndexCreated < mDataSet.getYValues().size() - 1) {

                        final LineDataSet set = getDataSet(mEntriesSet, mDataSet, colorSecondary);
                        if (mEntriesSet.size() != 0)
                            mGraphLineData.addDataSet(set);
                        lastIndexCreated = (int) mEntriesSet.get(mEntriesSet.size() - 1).getX();
                    }
                }
    }

    private ArrayList<Entry> getEntries(final List<Float> yValues, final int firstValueIndex) {
            final ArrayList<Entry> mEntries = new ArrayList<>();
            for (int i = firstValueIndex; i < yValues.size(); i++) {
                if (yValues.get(i) != null)
                 //boolean here is false means that dataset is not fake and should be shown
                    mEntries.add(new Entry(i, yValues.get(i), false));
                else if (firstValueIndex == i) {
                //add a "Fake" data entry, and use mEntry.getData to set line to not be visible.
                    mEntries.add(new Entry(i, 0, true));
                    break;
                } else {
                    break;
                }
            }
            return mEntries;
        }

关于android - MPAndroidChart Linechart 未连接的数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31939810/

相关文章:

android - 我使用的每个 API 都需要一个 API key 吗?

android - 使用 HttpResponsecache 的离线缓存时出现 FileNotFoundException

android - MPAndroidChart 中的可滚动折线图

android - 带 MPAndroidChart 的条形图 : bars are invisible

Android - 使用 MPAndroidChart 填充两条线之间的颜色

android - 如何在相同的 x,y 值上管理多个标记 View

java - 在另一个 fragment 中使用 fragment 的对象

Android YouTube API “An error occurred while initializing YouTube player”

android - 如何在使用改造发送到服务器之前压缩捕获的图像文件大小

java - Android 图表如何删除垂直侧线?尝试了一切