当前位置: 首页 > 知识库问答 >
问题:

MPAndroidChart分组条形图:组标题未显示在组上方

冷正青
2023-03-14

我有一个带有4个条形图的条形图,使用MPAndroidChart库将其分为2组。到目前为止,这是可行的。现在,我想在每个组上方显示一个标题。这是我当前的输出(如您所见,标题未显示在每组上方)。

我的代码:

   _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个答案

卢德惠
2023-03-14

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

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

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

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

然后改变...

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

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

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

结果:

 类似资料:
  • 我使用MPAndroidChart条形图(分组数据集)显示两个用户的数据。它正在显示数据,但问题是,它从一开始就没有在x轴上显示数据,因此所有条形图都不可见。 阵列: 条形图: 我已经尝试了stackoverflow的答案,但没有解决我的问题。请帮助! 更新: 是否可以将标签与条形图居中?

  • 以下是分组条形图的示例。 我们已经在Google Charts Configuration Syntax一章中看到了用于绘制图表的配置 。 现在,让我们看一个分组条形图的示例。 配置 (Configurations) 我们使用BarChart类来显示基于条形图。 // bar chart BarChart chart = new BarChart(); 例子 (Example) HelloWor

  • 我有一堆标记,我可以在其中加载到谷歌地图上。我的问题是,相机不在标记之上。我可以将它集中在我所有的标记之上吗? 我正在使用以下代码添加标记: 我在堆栈上看了看,发现了这个问题,和我的问题一样: Android谷歌地图API V2中心标记 但它背后没有太多的背景,也不知道如何实现它。

  • 我目前正在一个项目中使用MPAndroidChart。我正在使用带有自定义BarChartRenderer和XaxiRenderer的条形图。 我面临的问题是,我希望与高亮显示(单击)栏关联的标签与该栏的颜色相同。 有没有办法通过重写lib函数/类来做到这一点? 这是我的图表实际状态的屏幕截图(10月16日的条形图突出显示)。 这是我想要的最终结果 有人试过在MPAndroidChart上做这种事

  • 我试图在python中使用plotly创建一个条形图,它既是堆叠的,又是分组的。 玩具示例(不同年份的花费和收入): 更新:根据这个Github的问题,堆叠的,分组的酒吧情节正在为未来的情节版本开发,所以这可能不会再是一个问题了。

  • 我正在尝试创建一个包含2个Barchart和一个linechart数据集的组合图表。所有数据集的X轴都应该相同。在Barchart之间应该有一个300%的空间集,其中包含BarData setGroupSpace(300F)。这就是问题所在,我不能让linechart也有这个空间,所以linechart的点总是在这2条之间。但看起来linechart有自己的X轴。此外,在X轴上的标签应移位,以2条