MPAndroidChart - CustomValueFormatter 从视口中呈现值

MPAndroidChart - CustomValueFormatter renders values out of the Viewport

几天前我一直在使用 HorizontalBarChart MPAndroidChart,运行 在尝试使用将时间从毫秒转换为 12h 的自定义 ValueFormatter 时遇到了问题格式化时间。 (08:50 AM)但正如您在下图中所见,该值被截断了...

是否可以为右侧的图表设置填充以使值可见?

这是配置图表的代码:

private void initializeChart() {
    // Customize user interaction on chart
    mHorizontalBarChart.setTouchEnabled(false);
    mHorizontalBarChart.setPinchZoom(false);
    mHorizontalBarChart.setDragEnabled(false);
    // Customize chart's standard settings
    mHorizontalBarChart.setDrawGridBackground(false);
    mHorizontalBarChart.setDescription("");
    mHorizontalBarChart.setHighlightEnabled(false);
    mHorizontalBarChart.getLegend().setEnabled(false);
    Paint infoPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    infoPaint.setTextAlign(Paint.Align.CENTER);
    infoPaint.setTextSize(12f);
    mHorizontalBarChart.setPaint(infoPaint, Chart.PAINT_INFO);

    // Customize X axis
    XAxis xAxis = mHorizontalBarChart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setTextSize(12f);
    xAxis.setDrawLabels(true);
    xAxis.setDrawAxisLine(false);
    xAxis.setDrawGridLines(false);
    xAxis.setAvoidFirstLastClipping(true);

    // Customize Y axis's
    // Left
    YAxis leftAxis = mHorizontalBarChart.getAxisLeft();
    leftAxis.setDrawLabels(false);
    leftAxis.setDrawAxisLine(false);
    leftAxis.setDrawGridLines(false);
    leftAxis.setDrawTopYLabelEntry(false);
    
    // Right
    YAxis rightAxis = mHorizontalBarChart.getAxisRight();
    rightAxis.setDrawLabels(false);
    rightAxis.setDrawAxisLine(false);
    rightAxis.setDrawGridLines(false);
    rightAxis.setDrawTopYLabelEntry(false);
    
}

这是填充它的代码:

private void setChartData(float range) {
    String[] daysOfWeek = new String[]{"MO", "TU", "WE", "TH", "FR", "SA", "SU"};
    ArrayList<String> xVals = new ArrayList<String>();
    for (int i = 0; i < daysOfWeek.length; i++) {
        xVals.add(daysOfWeek[i]);
    }

    ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();

    for (int i = 0; i < daysOfWeek.length; i++) {
        float mult = (range + 1);
        float val = (float) (Math.random() * mult);
        yVals1.add(new BarEntry(val, i));
    }

    BarDataSet set1 = new BarDataSet(yVals1, "DataSet");
    set1.setBarSpacePercent(35f);

    ArrayList<BarDataSet> dataSets = new ArrayList<BarDataSet>();
    dataSets.add(set1);

    BarData data = new BarData(xVals, dataSets);
    data.setValueTextSize(10f);
    data.setValueFormatter(new ValueFormatter() {
        @Override
        public String getFormattedValue(float value) {
            return value + "some extra text";
        }
    });

    mHorizontalBarChart.setData(data);
}

非常感谢任何帮助。

代码来自@Philipp Jahoda 提供的示例。

编辑:基于 Philipp 的回答:

我使用 setSpaceTop(float percent) 调整了 BarData 值的 space。

    // Customize Y axis's
    // Left
    YAxis leftAxis = mHorizontalBarChart.getAxisLeft();
    leftAxis.setDrawLabels(false);
    leftAxis.setDrawAxisLine(false);
    leftAxis.setDrawGridLines(false);
    leftAxis.setDrawTopYLabelEntry(false);
    leftAxis.setSpaceTop(20); // use these to adjust space for the BarData values
    // Right
    YAxis rightAxis = mHorizontalBarChart.getAxisRight();
    rightAxis.setDrawLabels(false);
    rightAxis.setDrawAxisLine(false);
    rightAxis.setDrawGridLines(false);
    rightAxis.setDrawTopYLabelEntry(false);
    rightAxis.setSpaceTop(20); // use these to adjust space for the BarData values

虽然代码必须优化,这只是一个快速测试,但这些建议值得一试。再次感谢菲利普!

阅读documentation of the YAxis

关注以下方法:

  • setAxisMaxValue(...) & setAxisMinValue(...)
  • setSpaceTop(...)
  • setSpaceBottom(...)

使用它们,您可以设置轴的范围/space。