MPAndroidChart分组Barchart:组标题未显示在上面的组中

时间:2017-06-21 20:52:37

标签: java android mpandroidchart

我有一个带有4个条形的条形图,使用MPAndroidChart library分为2组。 这项工作到目前为止。现在我想在每个组上面显示一个标题。这是我当前的输出(如您所见,每个组上方都没有显示标题)。

enter image description here

我的代码:

   _overviewBarChart.setPinchZoom(false);
    _overviewBarChart.getDescription().setEnabled(false);
    _overviewBarChart.setDrawValueAboveBar(true);
    _overviewBarChart.getXAxis().setCenterAxisLabels(true);
    _overviewBarChart.getXAxis().setAxisMinimum(0);
    _overviewBarChart.getXAxis().setDrawGridLines(false);

private void updateOverviewBarChart() {

    //Init calorie needs bars

    BarEntry todayCalorieNeedsBarEntry = new BarEntry(0, _calorieEntry.getTarget());
    BarEntry yesterdayCalorieNeedsBarEntry = new BarEntry(0, 0);
    if (_yesterdayCalorieEntry != null)
        yesterdayCalorieNeedsBarEntry = new BarEntry(0, _yesterdayCalorieEntry.getTarget());

    ArrayList<BarEntry> calorieNeedsBarEntries = new ArrayList<>();
    calorieNeedsBarEntries.add(todayCalorieNeedsBarEntry);
    calorieNeedsBarEntries.add(yesterdayCalorieNeedsBarEntry);

    //Init consumed calories bars

    BarEntry todayConsumedCaloriesBarEntry = new BarEntry(1, _calorieEntry.getConsumed());
    BarEntry yesterdayConsumedCaloriesBarEntry = new BarEntry(1, 0);
    if (_yesterdayCalorieEntry != null)
        yesterdayConsumedCaloriesBarEntry = new BarEntry(1, _yesterdayCalorieEntry.getConsumed());

    ArrayList<BarEntry> consumedCaloriesBarEntries = new ArrayList<>();
    consumedCaloriesBarEntries.add(todayConsumedCaloriesBarEntry);
    consumedCaloriesBarEntries.add(yesterdayConsumedCaloriesBarEntry);

    //Init BarDataSets

    BarDataSet calorieNeedsBarDataSet = new BarDataSet(calorieNeedsBarEntries, getString(R.string.fragment_main_calorieneeds));
    calorieNeedsBarDataSet.setColor(Color.parseColor("#26A69A"));
    BarDataSet consumedCaloriesBarDataSet = new BarDataSet(consumedCaloriesBarEntries, getString(R.string.fragment_main_consumed));
    consumedCaloriesBarDataSet.setColor(Color.parseColor("#E53935"));

    //Init BarData, group BarEntrys, set group titles

    BarData barData = new BarData(calorieNeedsBarDataSet, consumedCaloriesBarDataSet);
    barData.setValueTextSize(14);
    barData.setBarWidth(0.2f);
    barData.groupBars(0, 0.15f, 0.1f);

    ArrayList<String> groupTitles = new ArrayList<String>();
    groupTitles.add(getString(R.string.fragment_main_today));
    groupTitles.add(getString(R.string.fragment_main_yesterday));

    _overviewBarChart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(groupTitles));// new BarChartStringFormatter(groupTitles));

    //Set data, redraw BarChart

    _overviewBarChart.setData(barData);
    _overviewBarChart.invalidate();
}

你能看出我做错了吗?

1 个答案:

答案 0 :(得分:1)

最后我找到了解决问题的方法。

首先,您必须添加这两行代码(注意:参数可能因您的要求而异):

_overviewBarChart.getXAxis().setGranularity(1f);
_overviewBarChart.getXAxis().setAxisMaximum(2);

我的错误是默认的XAxis要精细颗粒化(0.1,0.2,0.3 ......)。因此,IndexAxisValueFormatter将组标题应用于每个XAxis步骤。 setGranularity解决了这个问题。最后,setAxisMaximum用于限制XAxis上的步数(之前是3,所以标题显示3次)。

然后改变......

barData.groupBars(0, 0.15f, 0.1f);

到此(注意:参数可能因您的要求而异)..

barData.groupBars(0, 0.45f, 0.1f);

结果:

enter image description here