Вертикальная ось MPAndroidChart для 0 значений [закрыто]

avatar
Patricia Badea
1 июля 2021 в 17:58
172
1
0

Я пытаюсь заполнить вертикальную гистограмму некоторыми значениями. Я по-прежнему хочу оставить в качестве записи значения, равные 0. Однако диаграмма выглядит подозрительно, когда есть существующая запись, равная 0.

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

Есть ли способ сделать его похожим на первое изображение, несмотря на 0 значений?

Источник

Ответы (1)

avatar
Etienne Kaiser
1 июля 2021 в 20:53
0

Я узнал, как добиться того, чтобы начать с нуля, даже если каждое значение равно 0. См. код ниже, я все прокомментировал:

public class MainActivity extends AppCompatActivity {

    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        ArrayList<BarEntry> inventory = new ArrayList<>();
        inventory.add(new BarEntry(1f,0));
        inventory.add(new BarEntry(2f,10));
        inventory.add(new BarEntry(3f,20));
        inventory.add(new BarEntry(4f,30));
        inventory.add(new BarEntry(5f,40));
        
        //Colors & Textsize
        
        BarDataSet barDataSet = new BarDataSet(inventory,"Inventory");
        barDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
        barDataSet.setValueTextColor(Color.BLACK);
        barDataSet.setValueTextSize(16f);
        
        //Start at zero even all values are 0 for left YAxis.
        YAxis yAxis = barChart.getAxis(YAxis.AxisDependency.LEFT);
        yAxis.setStartAtZero(true);

        //Start at zero even all values are 0 for right YAxis.
        YAxis yAxis1 = barChart.getAxis(YAxis.AxisDependency.RIGHT);
        yAxis1.setStartAtZero(true);

        //Define every space between the scales you want to.
        XAxis xAxis = barChart.getXAxis();
        xAxis.setGranularity(1.0f);
        xAxis.setGranularityEnabled(true);

        /*
        //Disables the right YAxis (Optional)
        YAxis rightYAxis = barChart.getAxisRight();
        rightYAxis.setEnabled(false);*/
        
        //Other Settings
        BarData barData = new BarData(barDataSet);
        barChart.setData(barData);
        barChart.getDescription().setEnabled(false);
        barChart.getLegend().setEnabled(false);
        barChart.animateX(500);

    }
}

Если вы хотите выполнить дальнейшую настройку, я предлагаю взглянуть на документацию.

РЕЗУЛЬТАТ

Finish Bar Chart

Patricia Badea
1 июля 2021 в 23:15
0

Я все еще хочу показать на графике, потому что для моего приложения важно, чтобы они были равны 0. Поэтому я не хочу их фильтровать.

Etienne Kaiser
2 июля 2021 в 18:23
0

Итак, если все равно нулю, вы хотите отобразить нули, но избавиться от -1? отрицательная шкала? Мне нужно немного больше информации, чтобы помочь.

Etienne Kaiser
3 июля 2021 в 15:53
0

Вам все еще нужна помощь с этим?

Patricia Badea
4 июля 2021 в 15:01
0

да, это именно то, что я пытаюсь сделать. Я хочу избавиться от -1 и хочу, чтобы график начинался с 0 по вертикальной оси, как на первом изображении.

Etienne Kaiser
4 июля 2021 в 16:11
0

Я обновил свой ответ, отметьте его как правильный, если вы этого хотели :)

Patricia Badea
4 июля 2021 в 18:55
0

Это действительно читается по отрицательной шкале. Однако я хочу сохранить правую ось Y (по крайней мере, строку в конце диаграммы), но проблема в том, что значения правой оси Y не соответствуют значениям, записанным на левой оси Y.

Etienne Kaiser
4 июля 2021 в 19:15
0

Я исправил это в коде выше. Вам нужно определить правильную диаграмму setStartAtZero(true); также. Теперь оба начинают с 0. Ура :)

Etienne Kaiser
4 июля 2021 в 19:20
0

Я также обновил изображение для полноты.

Patricia Badea
8 июля 2021 в 13:44
0

Благодарю вас! Работает отлично!