Значения Int на BarChart - PullRequest
       10

Значения Int на BarChart

0 голосов
/ 27 апреля 2018

Я хочу, чтобы значения на моей гистограмме были целыми числами. Мне удалось выяснить, как изменить значения, представленные на осях с помощью ValueFormatter, но это не повлияло на значения на графике. Вот что у меня сейчас есть:

enter image description here

А вот и мой код:

HorizontalBarChart barChart = findViewById(R.id.bar_chart);

    ArrayList<BarEntry> yValues = new ArrayList<>();
    SharedPreferences appData = getSharedPreferences("app_data", Context.MODE_PRIVATE);
    String[] supermarkets = new String[appData.getAll().size()];
    int i = 0;
    for (Map.Entry<String, ?> entry : appData.getAll().entrySet()) {
        int value = (Integer)entry.getValue();
        BarEntry e = new BarEntry(i, value, 3);
        yValues.add(e);
        supermarkets[i] = entry.getKey();
        i++;
    }

    BarDataSet dataSet = new BarDataSet(yValues, "Supermarkets");
    dataSet.setColors(ColorTemplate.COLORFUL_COLORS);
    BarData data = new BarData(dataSet);

    barChart.getXAxis().setDrawGridLines(false);
    barChart.getXAxis().setDrawAxisLine(false);

    barChart.getAxisLeft().setDrawGridLines(false);
    barChart.getAxisRight().setEnabled(false);
    barChart.getAxisLeft().setEnabled(false);

    barChart.getAxisRight().setDrawGridLines(false);
    barChart.getAxisLeft().setAxisMinimum(0);
    barChart.getAxisRight().setAxisMinimum(0);

    barChart.getXAxis().setValueFormatter(new LabelFormatter(supermarkets));
    barChart.getXAxis().setGranularity(1);
    barChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);

    barChart.setData(data);

public class LabelFormatter implements IAxisValueFormatter {
    private final String[] mLabels;

    LabelFormatter(String[] labels) {
        mLabels = labels;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        return mLabels[(int) value];
    }
}

1 Ответ

0 голосов
/ 27 апреля 2018

Возможно, вы хотите добавить ValueFormatter к YAxis, возвращая значение в виде строки следующим образом:

barChart.getYAxis().setValueFormatter(new IntegerFormatter());

Используя этот простой класс:

public class IntegerFormatter implements IAxisValueFormatter {
    private DecimalFormat mFormat;

    public MyAxisValueFormatter() {
        mFormat = new DecimalFormat("###,###,##0");
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        return mFormat.format(value);
    }
}

Я использую DecimalFormat для дополнительных запятых. Например, «1234567» следует обозначить как «1 234 567». Для получения подробной информации посмотрите спецификацию здесь . Источник

...