MPAndroidChart настройка горизонтальной диаграммы BarChart - PullRequest
0 голосов
/ 25 мая 2020

Вот изображение гистограммы. Как видите, возникла проблема с выравниванием, полосы не совпадают с метками, особенно в средней части. Кроме того, я хочу, чтобы нижняя ось показывала полосы в 10, а не в 1,2, 1,4, 1,6 и c, так как десятичных знаков никогда не будет, поэтому это бесполезно. Я также хотел бы, чтобы значение каждого столбца отображалось в конце в виде числа, чтобы показать общее количество для каждого столбца.

Изображение диаграммы https://imgur.com/gallery/ThHx1eJ

Стайлинг

 // All JSON entries form the MYSQL server are parsed into an ArrayList.
    moodEntries = new ArrayList<>();

    // For loop which dynamically adds all entries to the ArrayList
    for (MoodStatsPieChartModel moodLogPieChartResponse : moodStatsPieChartModels) {

        moodEntries.add(new BarEntry(moodLogPieChartResponse.getMoodBefore(), moodLogPieChartResponse.getMoodCount()));
    }
 -- the .getmoodBefore() will be an int value from 1 - 18 which represents a mood 
    and the .getmoodCount() just totals how much of each mood. 
    This data is stored in the internal sqlite database.
}

 // custom X-axis labels
    String[] values = new String[] { "Excited", "Happy", "Confident", "Proud", "Content", "Fine", "Relaxed", "Calm", "Tired", "Guilty", "Sad", "Depressed", "Embarrassed", "Upset", "Stressed", "Anxious", "Confused", "Disgusted"};

    BarDataSet barDataSet = new BarDataSet(moodEntries, "");
    barDataSet.setColors(color);
    barDataSet.setValueTextSize(16f);
    barDataSet.setValueTextColor(Color.BLACK);

    BarData data = new BarData(barDataSet);
    //barData.setBarWidth(1f);
    data.setValueTextSize(10f);


    XAxis xAxis = chart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setLabelCount(values.length, true);
    xAxis.setDrawLabels(true);
    xAxis.setCenterAxisLabels(true);
    xAxis.setValueFormatter(new MyXAxisValueFormatter(values));
    xAxis.setGranularity(10f);
    //xAxis.setGranularityEnabled(true);
    //xAxis.setDrawGridLines(false);
    //xAxis.setDrawAxisLine(false);
    //xAxis.setDrawLabels(true);
    //xAxis.setAxisMaximum(values.length);
    //barChart.getXAxis().setDrawGridLines(false);
    //xAxis.setAxisMinimum(values.length);


    // Top Axis
    YAxis yAxis = chart.getAxisLeft();
    yAxis.setDrawAxisLine(false);
    yAxis.setDrawGridLines(false);
    //yAxis.setGranularity(1f);
    yAxis.setDrawLabels(false);
    //yAxis.setAxisMaximum(0f);
    //yAxis.setDrawGridLinesBehindData(false);


    // Bottom Axis
    YAxis yAxisBottom = chart.getAxisRight();
    yAxisBottom.setDrawGridLines(false);
    yAxisBottom.setDrawAxisLine(false);
    //yAxisBottom.setGranularity(10f);
    //yAxisBottom.setDrawGridLinesBehindData(false);
    //yAxisBottom.setDrawLabels(true);
    //yAxisBottom.setAxisMinimum(2f);


    Legend l = chart.getLegend();
    l.setEnabled(false);
    chart.setVisibility(View.VISIBLE);
    chart.animateXY(1000, 1000);
    chart.getDescription().setEnabled(false);
    chart.setExtraOffsets(-10, -10, -10, -10);
    chart.setDrawGridBackground(false);
    chart.setDrawBarShadow(false);
    chart.setDrawValueAboveBar(true);
    //chart.setFitBars(true);
    //chart.setMaxVisibleValueCount(100);



    chart.setData(data);
    chart.invalidate();

1 Ответ

0 голосов
/ 25 мая 2020

Вы можете попробовать следующее:

public class ValFormatter extends ValueFormatter {


    @Override
    public String getFormattedValue(float value) {
        if(value == Math.round(value)){ // value is an integer?
            return String.valueOf((int) value);
        }else{
            return "";
        }
    }
}

и

yAxisBottom.setValueFormatter(new ValFormatter())

Потому что yAxis показывает вам диапазон. Таким образом, вы можете исправить это.

Вы можете попробовать эти строки для значения bar:

data.setValueTextSize(10f)
data.setDrawValues(true)
...