我在使用Android中MPAndroidCharts库中的LineChart
绘制我的观点时遇到了问题。
方案
我想制作如下图所示的图表。我的x轴值可能会在ArrayList
中增加或减少。
问题 我有一个坐标列表,其中包含绘图的x和y坐标。 但是当X轴中的值从前一个值减小时,它会抛出错误
E/UncaughtException: java.lang.NegativeArraySizeException: -6
at com.github.mikephil.charting.utils.Transformer.generateTransformedValuesLine(Transformer.java:178)
我的努力
我的模型类,用于创建具有lat-long
的对象列表public List<DataSetModel> getData() {
List<DataSetModel> dataSetModelList=new ArrayList<>();
DataSetModel dataSetModel = new DataSetModel();
dataSetModel.setxCoordinate(10.0f);
dataSetModel.setyCoordinate(10.0f);
dataSetModelList.add(dataSetModel);
DataSetModel dataSetModel2 = new DataSetModel();
dataSetModel2.setxCoordinate(15.0f);
dataSetModel2.setyCoordinate(15.0f);
dataSetModelList.add(dataSetModel2);
DataSetModel dataSetModel3 = new DataSetModel();
dataSetModel3.setxCoordinate(20.0f);
dataSetModel3.setyCoordinate(18.0f);
dataSetModelList.add(dataSetModel3);
DataSetModel dataSetModel4 = new DataSetModel();
dataSetModel4.setxCoordinate(23.0f);
dataSetModel4.setyCoordinate(20.0f);
dataSetModelList.add(dataSetModel4);
DataSetModel dataSetModel5 = new DataSetModel();
dataSetModel5.setxCoordinate(25.0f);
dataSetModel5.setyCoordinate(18.0f);
dataSetModelList.add(dataSetModel5);
DataSetModel dataSetModel6 = new DataSetModel();
dataSetModel6.setxCoordinate(23.0f);
dataSetModel6.setyCoordinate(15.0f);
dataSetModelList.add(dataSetModel6);
DataSetModel dataSetModel8 = new DataSetModel();
dataSetModel8.setxCoordinate(20.0f);
dataSetModel8.setyCoordinate(16.0f);
dataSetModelList.add(dataSetModel8);
return dataSetModelList;
}
我为了获得折线图而编写的代码
LineChart chart = findViewById(R.id.LineChartId);
List<DataSetModel> dataObjects=getData();
List<Entry> entries = new ArrayList<Entry>();
for (int i = 0; i < dataObjects.size(); i++) {
entries.add(new Entry(dataObjects.get(i).getxCoordinate(),dataObjects.get(i).getyCoordinate()));
}
LineDataSet dataSet = new LineDataSet(entries, "Label1"); // add entries to dataset
dataSet.setColor(R.color.colorSeverityHigh);
dataSet.setLineWidth(3.0f);
dataSet.setValueTextColor(R.color.colorSeverityHigh); // styling, ...
dataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
LineData lineData = new LineData(dataSet);
chart.setData(lineData);
我甚至尝试过ScatterChart,但在这种情况下无法连接点。感谢任何帮助,谢谢
答案 0 :(得分:1)
根据library documentation,LineChart仅支持x轴的有序值。您不想支持您尝试实现的功能。
条目顺序
请注意,此图书馆不正式支持绘图 条目列表中的LineChart数据未按照x位置排序 条目以递增的方式。以未分类的方式添加条目可能 导致正确绘图,但也可能导致意外行为。 Entry对象列表可以手动排序或使用 EntryXComparator:
List<Entry> entries = ...; Collections.sort(entries, new EntryXComparator());
之所以需要这是因为库使用二进制文件 搜索算法以获得更好的性能,仅适用于排序列表。
我建议您使用其他库,例如SparkLine