我正在调查MPAndroidChart
在我公司的Android和iOS应用程序中的使用情况,我发现了一个问题,我需要一个解决方案才能使用此框架。
应用程序主要使用折线图功能,提供的数据可以包含NULL
条目。我已经看到其他帖子讨论了这个问题,显然还没有显示NULL
值的解决方案。 MPAndroidChart with null values
作者建议不要将数据点添加到集合中,但在我的情况下,有一个"洞"非常重要。在图中,有两个以上的连续NULL
值(或者表示它),即图形不是在两个点之间连续,其中NULL
值。有什么办法可以用这个框架来实现这个目标吗?
我一直在研究将数据点分成不同数据集的可能性,但它看起来像是一种黑客攻击。
谢谢!
数据集示例:
[1 2 10 NULL NULL NULL 20 25 30]
The Line must NOT connect the numbers 10 and 20.
答案 0 :(得分:4)
这是我最终想出来解决这个问题 - 对于未来的任何人。它迭代并在数据集中创建新条目,直到它达到空值,然后它创建数据集,其中“假”条目在条目构造函数中使用布尔值。布尔可以在
中找到“entry.getData()”
然后您可以使用它来设置数据集不可见
“mLineDataSet.setVisible(假);”
注意:不要尝试将数据集颜色设置为透明 - 该库有一个错误,如果某些条目为空,则图形甚至不会出现。
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;
}