MPAndroid图表需要使用数组列表添加值

MPAndroid chart need to add values using array list

我有一个 arraylistobject,我需要使用这个对象数组创建一个 line chart,我有 y 轴的最小 y 值和最大 y 值,我还有 x 轴的字符串数组。这 2 个数组的长度不同。

我的问题出在 MPAndroidChart 库中 我可以仅使用静态值创建折线图。但是在这里我需要使用动态值来创建它。

  for (int i=0;i<deals.size();i++) {

        float y = (float)deals.get(i).getPrice();

        values.add(new Entry(y, y));
    }

    // create a dataset and give it a type
    LineDataSet set1 = new LineDataSet(values, "DataSet 1");
    set1.setAxisDependency(YAxis.AxisDependency.LEFT);
    set1.setColor(ColorTemplate.getHoloBlue());
    set1.setValueTextColor(ColorTemplate.getHoloBlue());
    set1.setLineWidth(1.5f);
    set1.setDrawCircles(false);
    set1.setDrawValues(false);
    set1.setFillAlpha(65);
    set1.setFillColor(ColorTemplate.getHoloBlue());
    set1.setHighLightColor(Color.rgb(244, 117, 117));
    set1.setDrawCircleHole(false);

    // create a data object with the datasets
    LineData data = new LineData(set1);
    data.setValueTextColor(Color.WHITE);
    data.setValueTextSize(9f);

    // set data
    mChart.setData(data);

首先你必须创建 ArrayList 值,我认为你是在添加 values.add(new Entry(y, y)); 时创建的。你必须在第二个参数中给出索引你在两个参数中都给出了值所以你应该做类似 values.add(new Entry(y,i));

希望对您有所帮助,如果有效请告诉我。我经常使用 Mpcharts 库,如果有进一步的疑问,您可以联系我。祝你好运!

您需要创建两个数据集
1.对于Y轴数据
2.对于X轴标签

如果对应的索引没有值可以直接跳过X值显示。

ArrayList<YourData> data= new ArrayList<>();
data.addAll(getDataFromDataSource());

ArrayList<String> xVals = new ArrayList<String>();
ArrayList<Entry> yVals = new ArrayList<>();

for (int i = 0; i <= data.size() - 1; i++) {            
        if(data.getName().equals(null)){
           xVals.add(i,"");
        }
        xVals.add(i, data.getName());
        yVals.add(new Entry(data.getValue(), i));
}

创建数据源后,创建LineDataSet对象以应用Y轴线颜色、线宽等

LineDataSet set1 = new LineDataSet(yVals, "");
set1.setAxisDependency(YAxis.AxisDependency.LEFT);
set1.setColor(ColorTemplate.getHoloBlue());
set1.setValueTextColor(ColorTemplate.getHoloBlue());
set1.setLineWidth(1.5f);
set1.setDrawCircles(false);
set1.setDrawValues(false);
set1.setFillAlpha(65);
set1.setFillColor(ColorTemplate.getHoloBlue());
set1.setHighLightColor(Color.rgb(244, 117, 117));
set1.setDrawCircleHole(false);

为 X 轴标签创建 LineData 对象

LineData data = new LineData(xVals, set1);
data.setValueTextColor(Color.WHITE);
data.setValueTextSize(9f);

最后将 LineData 对象传递给 LineChart

mChart.setData(data);

您的最终代码应如下所示

ArrayList<YourData> data= new ArrayList<>();
data.addAll(getDataFromDataSource());

ArrayList<String> xVals = new ArrayList<String>();
ArrayList<Entry> yVals = new ArrayList<>();

for (int i = 0; i <= data.size() - 1; i++) {            
        if(data.getName().equals(null)){
           xVals.add(i,"");
        }
        xVals.add(i, data.getName());
        yVals.add(new Entry(data.getValue(), i));
}

LineDataSet set1 = new LineDataSet(yVals, "");
set1.setAxisDependency(YAxis.AxisDependency.LEFT);
set1.setColor(ColorTemplate.getHoloBlue());
set1.setValueTextColor(ColorTemplate.getHoloBlue());
set1.setLineWidth(1.5f);
set1.setDrawCircles(false);
set1.setDrawValues(false);
set1.setFillAlpha(65);
set1.setFillColor(ColorTemplate.getHoloBlue());
set1.setHighLightColor(Color.rgb(244, 117, 117));
set1.setDrawCircleHole(false);

LineData data = new LineData(xVals, set1);
data.setValueTextColor(Color.WHITE);
data.setValueTextSize(9f);

mChart.setData(data);

希望有用:)