(MPAndroidChart) 一些标签没有显示在条形图中

(MPAndroidChart) Some labels are not showing in Barchart

我正在使用 MPAndroidChart(https://github.com/PhilJay/MPAndroidChart)。

我制作了一个条形图,但没有显示 xAxis-2nd 值。

x,y : 1 周, 3회

x,y : 2 周, 0회

x,y : 3 周, 0회

x,y : 4 周, 0회

x,y : 5 周, 0회

这些是我的入门值。但是像这样,我的 phone.

中没有显示第二个标签

我附上了来源和结果截图。

ArrayList<BarEntry> entries = new ArrayList<>();
        ArrayList<String> labels = new ArrayList<String>();
        String[] labels2 = new String[ExRegList.length()];
        try {
            exerciseWholeCnt = ExRegList.length();
            for (int i = 0; i < ExRegList.length(); i++) {
                JSONObject obj = ExRegList.getJSONObject(i);
                String week = obj.getString("WEEK");
                int exCnt = obj.getInt("RESULT_COUNT");
                labels.add(week + "주");
                labels2[i] = week+"주";
                entries.add(new BarEntry(i,exCnt));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        XAxis xAxis = barChart.getXAxis();
        xAxis.setValueFormatter(new IndexAxisValueFormatter(labels2));
        XAxis bottomAxis = barChart.getXAxis();
        bottomAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        bottomAxis.setDrawLabels(true);
        bottomAxis.setDrawGridLines(false);
        bottomAxis.setDrawAxisLine(true);



        YAxis left = barChart.getAxisLeft();
        left.setAxisMinimum(0);
        left.setAxisMaximum(7);

        BarDataSet barDataSet = new BarDataSet(entries, "01");
        BarData barData = new BarData(barDataSet);

        YAxis rightYAxis = barChart.getAxisRight();
        rightYAxis.setEnabled(false);

        barChart.setData(barData);
        barChart.setDescription(null);
        barChart.setPinchZoom(false);
        barChart.setScaleEnabled(false);
        barChart.setDrawBarShadow(false);
        barChart.setDrawGridBackground(false);
        barChart.animateY(2000);
        barChart.getLegend().setEnabled(false);
        barChart.getData().setValueTextSize(10);

        barChart.getBarData().setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                if (value != 0) {
                    DecimalFormat format = new DecimalFormat("#");
                    return format.format(value) + "회";
                }
                return "";
            }
        });

//            barChart.getXAxis().setValueFormatter(new MyValueFormatter());

        barChart.invalidate();
    }

结果是。

任何人都可以帮助我。谢谢

根据您的代码,我可以猜测 code/data

中存在运行时错误
 try {
            exerciseWholeCnt = ExRegList.length();
          for (int i = 0; i < ExRegList.length(); i++) {
            JSONObject obj = ExRegList.getJSONObject(i);
            String week = obj.getString("WEEK");
            int exCnt = obj.getInt("RESULT_COUNT");
            labels.add(week + "주");
            labels2[i] = week+"주";
            entries.add(new BarEntry(i,exCnt));
         }

你能检查一下循环在第二次运行时是否完美运行并且日志中没有任何内容吗

    } catch (Exception e) {
        **e.printStackTrace();**
    }

终于通过查看库的源代码找到了问题所在。您应该调用 setLabelCount。在这一行之后:

  XAxis bottomAxis = barChart.getXAxis();

将计数设置为 X 轴的标签:

   bottomAxis.setLabelCount(entries.size());

它会起作用的。

解释: 基本上,默认标签计数为 6(如果您不指定)并且它不会正确计算适当的标签。在您的情况下,您有 5 个项目,格式化程序获取值 0 、 0.8、1.6、2.4、3.2 和 4.0 - 6 值。而这个库的方法给出了第二个值的“”值:

   public String getFormattedValue(float value, AxisBase axis) {
        int index = Math.round(value);

        if (index < 0 || index >= mValueCount || index != (int)value)
            return "";

        return mValues[index];
    }

这是库的源代码,为您提供 标签。在您的情况下,它在呈现第二个值时给出“”。