我正在调查 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/