Android MP图表 - 折线图x轴中的值减小时出错

时间:2018-04-10 13:41:28

标签: android android-layout android-activity mpandroidchart android-graphview

我在使用Android中MPAndroidCharts库中的LineChart绘制我的观点时遇到了问题。

方案

我想制作如下图所示的图表。我的x轴值可能会在ArrayList中增加或减少。

Sample Image

问题 我有一个坐标列表,其中包含绘图的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,但在这种情况下无法连接点。感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:1)

根据library documentation,LineChart仅支持x轴的有序值。您不想支持您尝试实现的功能。

  

条目顺序

     

请注意,此图书馆不正式支持绘图   条目列表中的LineChart数据未按照x位置排序   条目以递增的方式。以未分类的方式添加条目可能   导致正确绘图,但也可能导致意外行为。   Entry对象列表可以手动排序或使用   EntryXComparator:

List<Entry> entries = ...;
Collections.sort(entries, new EntryXComparator());
     

之所以需要这是因为库使用二进制文件   搜索算法以获得更好的性能,仅适用于排序列表。

我建议您使用其他库,例如SparkLine