(MPAndroidChart)Barchart中没有显示某些标签

时间:2018-01-05 12:07:15

标签: android mpandroidchart

我正在使用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회

这些是我的参赛价值。但是像这样,第二个标签没有显示在我的手机中。

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

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();
    }

,结果是。

enter image description here 任何人都可以帮助我。感谢。

2 个答案:

答案 0 :(得分:3)

最后,在查看了库的源代码后发现了问题。您应该拨打 setLabelCount 。在这一行之后:

  XAxis bottomAxis = barChart.getXAxis();

将计数设置为X轴标签:

   bottomAxis.setLabelCount(entries.size());

它会起作用。

enter image description here

<强>阐释: 基本上,默认标签计数为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];
    }

这是图书馆的源代码,为您提供标签。在你的情况下,它在渲染第二个值时给出“”。

答案 1 :(得分:0)

从您的代码中我可以猜到代码/数据中存在运行时错误

 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();**
    }