MPAndroidChart 条形图 - 如何对组之间具有随机 x 轴间隔的条形进行分组?

2024-03-26

我想制作一个条形图,其中每个数据点将 3 个不同的数据集分组在一起,如下所示:

但是,我无法使用库提供的功能将条形图分组在一起groupBars方法,因为无论我为条目设置什么 x 值,它都会根据我在其参数中指定的间隔对条形进行分组。

例如,如果我生成一个具有条目 x 值 {0, 5, 13, 17...50} 的数据集并调用“groupBars”,则我的所有条目都会以 1 个 x 值分开,如下所示:

我想要的是将每个条形分组,并且每个条形在其指定的 x 值处可见。如果我简单地删除groupBars调用,我得到的东西与我想要的类似,但不完全是因为条形图都是重叠的,如下所示:

如何获得与上图类似的结果,但每个数据集的条完全可见?这是我用于生成数据集并对条形进行分组的代码:

        ArrayList<BarEntry> happinessValues = new ArrayList<>();
        ArrayList<BarEntry> stressValues = new ArrayList<>();
        ArrayList<BarEntry> painValues = new ArrayList<>();

        for (int i = 0; i < 50; ++i) {
            happinessValues.add(new BarEntry(
                    i,
                    datapoint.getHappiness()));
            stressValues.add(new BarEntry(
                    i,
                    datapoint.getStress()));
            painValues.add(new BarEntry(
                    i,
                    datapoint.getPain()));
        }

        HappinessDataset happyDataset;

        BarDataSet stressDataset, painDataset;

            happyDataset = new HappinessDataset(happinessValues, "Happiness");

            stressDataset = new BarDataSet(stressValues, "Stress");

            painDataset = new BarDataSet(painValues, "Pain");

            BarData data = new BarData(happyDataset, stressDataset, painDataset);

            mChart.setData(data);

        mChart.getXAxis().setAxisMinimum(0);
        mChart.getXAxis().setAxisMaximum(50);


      float groupSpace = 0.4f;
        float barSpace = 0f; // x3 DataSet
        float barWidth = 0.2f; // x3 DataSet
        // (0.2 + 0) * 3 + 0.4 = 1.00 -> interval per "group"
        mChart.groupBars(startTime, groupSpace, barSpace);

我通过修改每个条形条目的 x 值和条形宽度解决了该问题。

我使用三个数据集创建一个新的 BarData 类并设置条形宽度(我们称之为BAR_WIDTH) 为 0.2(即三个条形在一起将占用 0.6 个单位的空间,并且数据集后面将有 0.4 个单位的间距)。

对于任何给定的柱条目,我将第一个柱放置在我想要的 x 值处(我们称其为i),我的 x 值处的第二个柱i+BAR_WIDTH,第三小节在i+2*BAR_WIDTH。结果是一组以我想要的任何 x 值为中心的 3 个条形条目,如下所示:

因此,在我上面的代码中,将条形条目创建代码修改为如下:

final float BAR_WIDTH = 0.2f;

     happinessValues.add(new BarEntry(
                        i,
                        datapoint.getHappiness()));
                stressValues.add(new BarEntry(
                        i + BAR_WIDTH,
                        datapoint.getStress()));
                painValues.add(new BarEntry(
                        i + 2 * BAR_WIDTH,
                        datapoint.getPain()));

mChart.getBarData().setBarWidth(BAR_WIDTH);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPAndroidChart 条形图 - 如何对组之间具有随机 x 轴间隔的条形进行分组? 的相关文章

随机推荐