Я пытаюсь нарисовать диаграммы с помощью MPAndroidChart, но в верхней части диаграммы значения оси X отображаются неправильно, как показано на первом изображении.Когда я увеличиваю масштаб самой диаграммы, появляются значения оси X, как мы видим на втором изображении.
Можно ли правильно отобразить значения оси X сразу после загрузки макета?
Отображаемая диаграмма после загрузки макета фрагмента контейнера:
![chart1](https://i.ibb.co/pz8mfFW/diagram1.jpg)
Диаграмма после увеличения:
![chart2](https://i.ibb.co/gjtzWFZ/diagram2.jpg)
РЕДАКТИРОВАТЬ: Следующий класс обрабатывает рисунок диаграммы:
public class Statistic {
private BarChart barChart;
private LineChart lineChart;
private PieChart pieChart;
private StatisticsViewModel statisticsViewModel;
private ValueFormatter customValueFormatter;
public Statistic(BarChart barChart, LineChart lineChart, PieChart pieChart) {
this.barChart = barChart;
this.lineChart = lineChart;
this.pieChart = pieChart;
}
public void barChart(AxesStatisticsResult axesStatisticsResult) {
barChart.fitScreen();
barChart.clear();
barChart.setDrawBarShadow(false);
barChart.setDoubleTapToZoomEnabled(false);
barChart.animateXY(1000, 1000);
barChart.setDrawValueAboveBar(true);
barChart.zoom(1.5f, 0, 0, 1.5f);
barChart.setPinchZoom(false);
barChart.setDrawGridBackground(true);
ArrayList<BarEntry> barEntries = new ArrayList<>();
barEntries = getBarEntryDataList(axesStatisticsResult);
BarDataSet barDataSet = new BarDataSet(barEntries, "");
barDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
barDataSet.setValueTextSize(10);
BarData data = new BarData(barDataSet);
barChart.setData(data);
XAxis xAxis = barChart.getXAxis();
xAxis.setTextSize(10);
xAxis.setGranularityEnabled(true);// egységnyi beosztás
xAxis.setGranularity(1f);
xAxis.setValueFormatter(new IndexAxisValueFormatter(axesStatisticsResult.getStatisticsNameAsTmb()));
xAxis.setPosition(XAxis.XAxisPosition.TOP);
xAxis.setLabelRotationAngle(45);
}
public void lineChart(AxesStatisticsResult axesStatisticsResult) {
lineChart.clear();
lineChart.fitScreen();
lineChart.setDragEnabled(true);
lineChart.setScaleEnabled(true);
lineChart.setDoubleTapToZoomEnabled(false);
lineChart.setExtraTopOffset(30.0f);
lineChart.animateXY(1000, 1000);
LimitLine upper_limit = new LimitLine(axesStatisticsResult.getUpperExtremeFloatValue(), "Kiugróan magas");
upper_limit.setLineWidth(4f);
upper_limit.enableDashedLine(10f, 10f, 0f);
upper_limit.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
upper_limit.setTextSize(10f);
LimitLine lower_limit = new LimitLine(axesStatisticsResult.getLowerExtremeFloatValue(), "Kiugróan alacsony");
lower_limit.setLineWidth(4f);
lower_limit.enableDashedLine(10f, 10f, 0f);
lower_limit.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
lower_limit.setTextSize(10f);
YAxis leftAxis = lineChart.getAxisLeft();
leftAxis.removeAllLimitLines();
leftAxis.addLimitLine(upper_limit);
leftAxis.addLimitLine(lower_limit);
leftAxis.enableGridDashedLine(10f, 10f, 0);
leftAxis.setDrawLimitLinesBehindData(true);
lineChart.getAxisRight().setEnabled(false);
ArrayList<Entry> yValues = new ArrayList<>();
yValues = getLineChartDataList(axesStatisticsResult);
LineDataSet set1 = new LineDataSet(yValues, "");
set1.setFillAlpha(110);
set1.setColor(Color.BLUE);
set1.setLineWidth(3f);
set1.setValueTextSize(15f);
set1.setValueTextColor(Color.DKGRAY);
ArrayList<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(set1);
LineData data = new LineData(dataSets);
lineChart.setData(data);
XAxis xAxis = lineChart.getXAxis();
xAxis.setGranularityEnabled(true);
xAxis.setGranularity(1f);
xAxis.setTextSize(10);
xAxis.setValueFormatter(new IndexAxisValueFormatter(axesStatisticsResult.getStatisticsNameAsTmb()));
xAxis.setPosition(XAxis.XAxisPosition.TOP);
xAxis.setDrawGridLines(true);
xAxis.setLabelCount(25);
xAxis.setLabelRotationAngle(45);
}
public void pieChart(AxesStatisticsResult axesStatisticsResult) {
pieChart.clear();
lineChart.fitScreen();
pieChart.setUsePercentValues(true);
pieChart.getDescription().setEnabled(false);
pieChart.setExtraOffsets(5, 10, 5, 5);
pieChart.setDragDecelerationFrictionCoef(0.99f);
pieChart.setDrawHoleEnabled(false);
pieChart.setHoleColor(Color.WHITE);
pieChart.setTransparentCircleRadius(61f);
pieChart.animateY(1000, Easing.EaseInCubic);
ArrayList<PieEntry> yValues = new ArrayList<>();
yValues = getPieEntryDataList(axesStatisticsResult);
PieDataSet dataSet = new PieDataSet(yValues, " ");
dataSet.setSliceSpace(1f);
dataSet.setSelectionShift(5f);
dataSet.setColors(ColorTemplate.JOYFUL_COLORS);
PieData data = new PieData(dataSet);
data.setValueTextSize(20f);
data.setValueTextColor(Color.DKGRAY);
pieChart.setData(data);
}
private ArrayList<Entry> getLineChartDataList(AxesStatisticsResult axesStatisticsResult) {
ArrayList<Entry> entryArrayList = new ArrayList<>();
for (int i = 0; i < axesStatisticsResult.size(); i++) {
entryArrayList.add(new Entry(i, axesStatisticsResult.get(i).getSingleStatisticsFloatValue()));
}
return entryArrayList;
}
private ArrayList<PieEntry> getPieEntryDataList(AxesStatisticsResult axesStatisticsResult) {
ArrayList<PieEntry> pieEntryArrayList = new ArrayList<>();
ArrayList<PieEntry> yValues = new ArrayList<>();
for (int i = 0; i < axesStatisticsResult.size(); i++) {
pieEntryArrayList.add(new PieEntry(axesStatisticsResult.get(i).getSingleStatisticsFloatValue(), axesStatisticsResult.get(i).getSingleStatisticsName() + " %"));
}
return pieEntryArrayList;
}
private ArrayList<BarEntry> getBarEntryDataList(AxesStatisticsResult axesStatisticsResult) {
ArrayList<BarEntry> barEntryArrayList = new ArrayList<>();
for (int i = 0; i < axesStatisticsResult.size(); i++) {
barEntryArrayList.add(new BarEntry(i, axesStatisticsResult.get(i).getSingleStatisticsFloatValue()));
}
return barEntryArrayList;
}
}