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

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

Ось также увеличивается только на 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;

Ответы на вопрос(4)

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

После вашегоBarData создается только вам нужно

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

Там нет необходимостиsetFitBarsи счетBARENTRY размер.

Решение Вопроса

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

chart.setFitBars(true)

Вы можете найти больше информации вBarChart Javadocs:

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

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

XAxis xAxis = chart.getXAxis();
xAxis.setSpaceMin(barData.getBarWidth() / 2f);
xAxis.setSpaceMax(barData.getBarWidth() / 2f);

В настоящее время невозможно повлиять на значения позиций, отображаемых на оси. СозданиеValueFormatter изменяет только отображаемый текст, а не фактическое положение метки.

 stefana23 нояб. 2016 г., 11:54
Как мы можем достичь этого с помощью CombinedChart?
 Brad23 июн. 2018 г., 18:03
Я не буду говорить о том, сколько времени я потратил впустую, пытаясь взломать это, используя минимальные и максимальные значения.
 Mateus Viccari09 сент. 2016 г., 01:55
Это печальный мир, в котором мы живем, когда приходится вручную устанавливать что-то, что должно быть уже установлено по умолчанию.
 Prabs06 февр. 2017 г., 10:54
 TR4Android06 февр. 2017 г., 11:10
@Nfear @Prabs Я обновил ответ решением, которое должно работать сCombinedCharts.
 Prabs06 февр. 2017 г., 10:29
@Nfear У вас есть решение для комбинированных графиков?

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

xAxis.setAxisMinimum(-0.5f);

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

установив х диапазон мин, используя

  barChart.setFitBars(true);
  barChart.setVisibleXRangeMinimum(barEntries.size());

Ваш ответ на вопрос