Я использую последнюю версию MPAndroidChart. Я пытаюсь создать сгруппированную гистограмму, следуя примеру этого ссылка, но безуспешно. Проблема в xAxis. Хотя я установил fromX = 0, столбцы не подходят к левой оси. Между левой вертикальной линией и началом первой полосы есть пробел.
Вот мой код:
BarChart barChart = (BarChart) view.findViewById(R.id.chartDesgFam);
ArrayList<BarEntry> entries = new ArrayList<>();
entries.add(new BarEntry(0,4f));
entries.add(new BarEntry(1,8f));
entries.add(new BarEntry(2,6f));
entries.add(new BarEntry(3,12f));
entries.add(new BarEntry(4,18f));
entries.add(new BarEntry(5,9f));
ArrayList<BarEntry> entries2 = new ArrayList<>();
entries2.add(new BarEntry(0,5f));
entries2.add(new BarEntry(1,6f));
entries2.add(new BarEntry(2,12f));
entries2.add(new BarEntry(3,5f));
entries2.add(new BarEntry(4,14f));
entries2.add(new BarEntry(5,3f));
BarDataSet dataset = new BarDataSet(entries, "Serie 1");
dataset.setColor(Color.rgb(0, 0, 200));
BarDataSet dataset2 = new BarDataSet(entries2, "Serie 2");
dataset2.setColor(Color.rgb(200, 0, 0));
ArrayList<String> labels = new ArrayList<String>();
labels.add("January");
labels.add("February");
labels.add("March");
labels.add("April");
labels.add("May");
labels.add("June");
XAxis xAxis = barChart.getXAxis();
xAxis.setSpaceMin(0f);
xAxis.setDrawGridLines(false);
xAxis.setDrawLabels(true);
xAxis.setCenterAxisLabels(true);
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setLabelCount(labels.size());
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
if (value>=0) {
if (value < labels.size() ) return labels.get((int) value);
else return "";
}
return "";
}
});
ArrayList<IBarDataSet> dataSets = new ArrayList<>();
dataSets.add(dataset);
dataSets.add(dataset2);
BarData data = new BarData(dataSets);
float groupSpace = 0.06f;
float barSpace = 0.02f; // x2 dataset
float barWidth = 0.45f; // x2 dataset
data.setBarWidth(barWidth);
barChart.setData(data);
barChart.groupBars(0, groupSpace, barSpace);
barChart.setFitBars(true);
barChart.invalidate();
Чтобы отрегулировать первую полосу влево, мне нужно указать -0.2f в параметре fromX. Я думаю, что это не для этого, но я не знаю, почему это не начинается с левой стороны. Вот результат:
Не работает. Это хуже всего. Если я устанавливаю ось минимум, он сдвигает метки и повторяет первую.
Пожалуйста, следуйте приведенному ниже коду, чтобы исправить это:
chart.getXAxis().setAxisMinimum(0);
chart.getXAxis().setAxisMaximum(0 + chart.getBarData().getGroupWidth(groupSpace, barSpace) * groupCount);
где groupCount - это общее количество записей в вашем наборе данных. Вы можете получить это как:
data.getDataSetCount();
Надеюсь, это сработает. Дай мне знать, приятель, если тебе нужно что-нибудь узнать.
Спасибо за помощь, но я не работаю. Как я ответил @Gavin Wright, если я изменю setAxisMinimun, я установлю столбцы с левой стороны, но метки X полностью смещены по центру и смещены из сгруппированных столбцов. И еще одна проблема - повторяется первая метка.
Наконец-то я понял !!!. Ваш ответ направил меня в правильном направлении. После большого количества ошибок было найдено решение setAxisMinimum (0), setAxisMaximun (BarEntry1.size () + 0.1f); Спасибо за вашу помощь.
Попробуйте использовать
xAxis.setAxisMinimum()с barWidth как часть параметра. Похоже, его нужно сместить примерно на barWidth / 2.