Сгруппированная панель MPAndroidChart не начинается с левой стороны

Я использую последнюю версию 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. Я думаю, что это не для этого, но я не знаю, почему это не начинается с левой стороны. Вот результат:

Сгруппированная панель MPAndroidChart не начинается с левой стороны

Попробуйте использовать xAxis.setAxisMinimum() с barWidth как часть параметра. Похоже, его нужно сместить примерно на barWidth / 2.

Gavin Wright 03.11.2018 11:43

Не работает. Это хуже всего. Если я устанавливаю ось минимум, он сдвигает метки и повторяет первую.

briast 05.11.2018 09:45
0
2
372
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пожалуйста, следуйте приведенному ниже коду, чтобы исправить это:

chart.getXAxis().setAxisMinimum(0);
chart.getXAxis().setAxisMaximum(0 + chart.getBarData().getGroupWidth(groupSpace, barSpace) * groupCount);

где groupCount - это общее количество записей в вашем наборе данных. Вы можете получить это как:

data.getDataSetCount();

Надеюсь, это сработает. Дай мне знать, приятель, если тебе нужно что-нибудь узнать.

Muhammad Saad Rafique 06.11.2018 07:54

Спасибо за помощь, но я не работаю. Как я ответил @Gavin Wright, если я изменю setAxisMinimun, я установлю столбцы с левой стороны, но метки X полностью смещены по центру и смещены из сгруппированных столбцов. И еще одна проблема - повторяется первая метка.

briast 06.11.2018 09:35

Наконец-то я понял !!!. Ваш ответ направил меня в правильном направлении. После большого количества ошибок было найдено решение setAxisMinimum (0), setAxisMaximun (BarEntry1.size () + 0.1f); Спасибо за вашу помощь.

briast 06.11.2018 10:26

Другие вопросы по теме