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

时间:2017-03-16 10:36:15

标签: android arrays mpandroidchart

我有arraylist object,我需要使用此对象数组创建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);

2 个答案:

答案 0 :(得分:1)

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

希望它有所帮助,如果有效,请告诉我。我使用Mpcharts库很多,如果有进一步的查询,你可以联系我。祝你好运!

答案 1 :(得分:1)

您需要创建两个数据集
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);

希望它有效:)