java - MPAndroidChart BarChart(分组数据集)未显示所有条形图

标签 java android charts bar-chart mpandroidchart

我正在使用 MPAndroidChart BarChart(分组数据集) 来显示两个用户的数据。它正在显示数据,但问题是它从一开始就没有在 x 轴上显示数据,因此所有条形图都不可见。

数组:

String[] title_list = {"Whatsapp", "Visit", "Callback", "Interested"}
int[] title_values_1 = {50, 15, 25, 36};
int[] title_values_2 = {70, 35, 15, 10};

条形图:

public void LoadBarChart()
    {
        List<BarEntry> barEntries1 = new ArrayList<>();
        for (int i = 0; i < title_list.length; i++) {
            barEntries1.add(new BarEntry(i, title_values_1[i]));
        }

        List<BarEntry> barEntries2 = new ArrayList<>();
        for (int i = 0; i < title_list.length; i++) {
            barEntries2.add(new BarEntry(i, title_values_2[i]));
        }

        BarDataSet dataSet1 = new BarDataSet(barEntries1, "Dataset 1");
        dataSet1.setColors(getColor(R.color.pie_chart_blue));
        dataSet1.setValueTextSize(10f);  /* values size */
        dataSet1.setValueTextColor(Color.WHITE);

        BarDataSet dataSet2 = new BarDataSet(barEntries2, "Dataset 2");
        dataSet2.setColors(getColor(R.color.pie_chart_red));
        dataSet2.setValueTextSize(10f);  /* values size */
        dataSet2.setValueTextColor(Color.WHITE);

        float groupSpace = 0.06f;
        float barSpace = 0.02f; // x2 dataset
        float barWidth = 0.45f; // x2 dataset

        BarData data = new BarData(dataSet1, dataSet2);
        ValueFormatter vf = new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) { return ""+(int)value; }
        };
        data.setValueFormatter(vf);
        data.setValueTextSize(12f);
        data.setBarWidth(barWidth);

        XAxis xAxis = barChart.getXAxis();
        xAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                return title_list[(int) value];
            }
        });
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawGridLines(false);
        xAxis.setDrawAxisLine(false);
        xAxis.setLabelCount(title_list.length);

        barChart.setData(data);
        barChart.groupBars(0f, groupSpace, barSpace);
        barChart.getDescription().setEnabled(false);
        barChart.setDrawValueAboveBar(false);
        barChart.setTouchEnabled(false);
        barChart.animateY(1000);
        barChart.invalidate();
    }

enter image description here

我已经尝试过 stackoverflow 上的答案,但没有解决我的问题。请帮忙!

更新:

Shayan 回答后,所有条形现在都可见,但标签未居中。 enter image description here

是否可以将标签与条形图居中?

最佳答案

你必须调整间距,我认为当它无法调整屏幕中的整个内容时,它就会开始切割条。

添加此行,以便条形图可以从头开始

    xAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)

像这样将间距和宽度设置得低一些

    float groupSpace = 0.06f;
    float barSpace = 0.02f; // x2 dataset
    float barWidth = 0.40f; // x2 dataset

完整的方法看起来像这样

public void LoadBarChart()
{
    List<BarEntry> barEntries1 = new ArrayList<>();
    for (int i = 0; i < title_list.length; i++) {
        barEntries1.add(new BarEntry(i, title_values_1[i]));
    }

    List<BarEntry> barEntries2 = new ArrayList<>();
    for (int i = 0; i < title_list.length; i++) {
        barEntries2.add(new BarEntry(i, title_values_2[i]));
    }

    BarDataSet dataSet1 = new BarDataSet(barEntries1, "Dataset 1");
    dataSet1.setColors(R.color.colorPrimary);
    dataSet1.setValueTextSize(10f);  /* values size */
    dataSet1.setValueTextColor(Color.WHITE);

    BarDataSet dataSet2 = new BarDataSet(barEntries2, "Dataset 2");
    dataSet2.setColors(R.color.colorPrimary);
    dataSet2.setValueTextSize(10f);  /* values size */
    dataSet2.setValueTextColor(Color.WHITE);

    float groupSpace = 0.06f;
    float barSpace = 0.02f; // x2 dataset
    float barWidth = 0.40f; // x2 dataset

    BarData data = new BarData(dataSet1, dataSet2);
    ValueFormatter vf = new ValueFormatter() {
        @Override
        public String getFormattedValue(float value) { return ""+(int)value; }
    };
    data.setValueFormatter(vf);
   // data.setValueTextSize(12f);
    data.setBarWidth(barWidth);

    XAxis xAxis = barChart.getXAxis();
    xAxis.setValueFormatter(new ValueFormatter() {
        @Override
        public String getFormattedValue(float value) {
            return title_list[(int) value];
        }
    });
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setDrawGridLines(false);
    xAxis.setDrawAxisLine(false);
    xAxis.setLabelCount(title_list.length);
    xAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)

    barChart.setData(data);
    barChart.groupBars(0f,groupSpace,barSpace);
    barChart.getDescription().setEnabled(false);
    barChart.setDrawValueAboveBar(false);
    barChart.setTouchEnabled(false);
    barChart.animateY(1000);
    barChart.invalidate();
}

希望这有效!

关于java - MPAndroidChart BarChart(分组数据集)未显示所有条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69083174/

相关文章:

java - 在 Android 上查找音高

java - Android media.AudioTrack.finalize 抛出 IllegalStateException : Binder has been finalized

java - 使用 Gson 解析没有键的嵌套 JSON 对象

Android库项目使用declare-styleable——如何编译?

javascript - JavaScript 图表库的速度比较

java - 衍生线程中的 Spring 事务

Java:UTC/GMT+0 的时区随机显示名称

java - Java 中整数数组的 Arraylist 的排序和比较

javascript - 制作交互式 Angular 谷歌图表指令来集成气泡图

reactjs - React-Vis - 如何渲染空白图表区域?