几天前,我一直在使用HorizontalBarChart MPAndroidChart,在尝试使用自定义ValueFormatter时遇到问题,该方法将时间从毫秒转换为12h格式时间。 (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提供的示例中使用了代码。

编辑:基于菲利普的答案:

我使用setSpaceTop(float percent)来调整BarData值的空间。

    // 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(...)


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

10-05 17:45