编程语言
首页 > 编程语言> > java-MPAndroidChart条形图-如何在组之间以随机X轴间隔对条进行分组?

java-MPAndroidChart条形图-如何在组之间以随机X轴间隔对条进行分组?

作者:互联网

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

enter image description here

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

例如,如果我生成一个具有条目x值{0,5,13,17 … 50}的数据集并调用`groupBars’,则我的所有条目都被收集到1个x值,如下所示:

enter image description here

我想要的是将每个分组的条形图,每个条形图在其指定的x值处可见.如果仅删除groupBars调用,我会得到与我想要的东西类似的信息,但是由于条形图都是重叠的,所以不会完全一样,如下所示:

enter image description here

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

        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处.结果是一组3个条形条目,它们以我想要的任何x值为中心,如下所示:

http://i.imgur.com/KrKTE45l.jpg

因此,在我上面的代码中,将bar-entry创建代码修改如下:

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);

标签:mpandroidchart,android-view,bar-chart,java,android
来源: https://codeday.me/bug/20191111/2020082.html