MPAndroidChart – первый и последний бары не отображаются правильно

  1. На гистограмме я создаю первую и последнюю строки, которые последовательно разрезаются пополам (даже если я добавляю дополнительные бары). Это также приводит к тому, что значения выше баров оказываются неуместными. Я раздуваю это внутри фрагмента.

  2. Ось также увеличивается только на 0,9 вместо 1. Чтобы исправить это, мне нужно реализовать интерфейс AxisValueFormatter?

Образ:

Введите описание изображения здесь

Код: .java

chart = (BarChart) view.findViewById(R.id.chart1); // Chart settings chart.setDrawGridBackground(false); chart.setHighlightFullBarEnabled(true); chart.setDrawBarShadow(false); chart.setDrawValueAboveBar(true); chart.setDescription(""); // Settings for X-Axis XAxis xAxis = chart.getXAxis(); xAxis.setDrawGridLines(false); xAxis.setEnabled(true); xAxis.setDrawLabels(true); xAxis.setPosition(XAxisPosition.BOTTOM); // Settings for Y-Axis YAxis leftAxis = chart.getAxisLeft(); YAxis rightAxis = chart.getAxisRight(); leftAxis.setAxisMinValue(0f); rightAxis.setAxisMinValue(0f); BARENTRY = new ArrayList<>(); BarEntryLabels = new ArrayList<String>(); BARENTRY.add(new BarEntry(2f, 1)); BARENTRY.add(new BarEntry(3f, 2)); BARENTRY.add(new BarEntry(4f, 3)); BARENTRY.add(new BarEntry(5f, 4)); BARENTRY.add(new BarEntry(6f, 5)); Bardataset = new BarDataSet(BARENTRY, "Projects"); Bardataset.setColors(ColorTemplate.COLORFUL_COLORS); BARDATA = new BarData(Bardataset); chart.setData(BARDATA); chart.invalidate(); // refresh chart.animateY(1500); return view; 

Чтобы ответить на ваши вопросы:

  1. Чтобы правильно показывать ваши бары, вам нужно поместиться в барах, как это (не спрашивайте меня, почему он не включен по умолчанию):

     chart.setFitBars(true) 

    Вы можете найти дополнительную информацию в BarChart BarChart:

    setFitBars(boolean enabled) : добавляет половину ширины полосы к каждой стороне диапазона оси x, чтобы можно было полностью отобразить полосы штрих-кода.

    Если у вас есть CombinedChart вы можете использовать setSpaceMin() и setSpaceMax() для добавления дополнительного интервала на обоих концах оси:

     XAxis xAxis = chart.getXAxis(); xAxis.setSpaceMin(barData.getBarWidth() / 2f); xAxis.setSpaceMax(barData.getBarWidth() / 2f); 
  2. В настоящее время невозможно повлиять на позиции значений, сделанные на оси. Создание ValueFormatter только изменяет отображаемый текст, а не фактическое положение метки.

Используйте setAxisMinimum и setAxisMaximum , он будет работать отлично!

После создания BarData вам просто нужно

 chart.getXAxis().setAxisMinimum(-data.getBarWidth() / 2); chart.getXAxis().setAxisMaximum(count-data.getBarWidth() / 2);` 

Нет необходимости в setFitBars , а счет – размер BARENTRY .

Если проблема связана только с первым баром, вы можете использовать отрицательные значения для минимума оси:

 xAxis.setAxisMinimum(-0.5f); 

Как и в ответе на этот вопрос здесь :