我想制作一个条形图,其中在每个数据点将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处.结果是一组3个条形条目,它们以我想要的任何x值为中心,如下所示:
因此,在我上面的代码中,将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);