MPAndroidChart BarChart - 条形内的垂直值

Man*_*273 2 java android mpandroidchart

我正在使用MPAndroidChart条形图库,其中,我曾经chart.setDrawValueAboveBar(false)在条形内部设置条形值,现在我想在条形内部垂直显示值。

请帮忙..提前谢谢你。

sau*_*vik 5

首先将其设为假

mChart.setDrawValueAboveBar(false);
Run Code Online (Sandbox Code Playgroud)

然后为您的数据集启用绘制值

barDataSet.setDrawValues(true);
Run Code Online (Sandbox Code Playgroud)

由于您还需要旋转文本......您必须为图表实现自定义渲染器。如果你想知道渲染器是如何工作的,请检查这个答案

我在下面提供了一个示例实现。您可以修改它以控制适合您的文本位置。

自定义渲染器

public class BarChartCustomRenderer extends BarChartRenderer {

    public BarChartCustomRenderer(BarDataProvider chart, ChartAnimator animator, ViewPortHandler viewPortHandler) {
        super(chart, animator, viewPortHandler);
    }

    public void drawValue(Canvas c, IValueFormatter formatter, float value, Entry entry, int dataSetIndex, float x, float y, int color) {
        mValuePaint.setColor(color);
        c.save();
        c.rotate(90f, x, y);
        Log.d("here", formatter.getFormattedValue(value, entry, dataSetIndex, mViewPortHandler) );
        c.drawText(formatter.getFormattedValue(value, entry, dataSetIndex, mViewPortHandler), x, y, mValuePaint);
        c.restore();
    }
}
Run Code Online (Sandbox Code Playgroud)

海图代码

        BarChart mChart = (BarChart) findViewById(R.id.barChart);
        mChart.setDrawBarShadow(false);
        mChart.setDrawValueAboveBar(false);
        mChart.getDescription().setEnabled(false);
        mChart.setDrawGridBackground(false);

        //**add renderer**
        BarChartCustomRenderer barChartCustomRenderer = new BarChartCustomRenderer(mChart, mChart.getAnimator(),   mChart.getViewPortHandler());
        mChart.setRenderer(barChartCustomRenderer);


        XAxis xaxis = mChart.getXAxis();
        xaxis.setDrawGridLines(false);
        xaxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xaxis.setGranularity(0.5f);
        xaxis.setGranularityEnabled(true);
        xaxis.setDrawLabels(true);
        xaxis.setDrawAxisLine(false);

        YAxis yAxisLeft = mChart.getAxisLeft();
        yAxisLeft.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
        yAxisLeft.setDrawGridLines(false);
        yAxisLeft.setDrawAxisLine(false);
        yAxisLeft.setEnabled(false);

        mChart.getAxisRight().setEnabled(false);

        Legend legend = mChart.getLegend();
        legend.setEnabled(false);

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

        ArrayList<String> ylabels = new ArrayList<>();
        for (int i = 0; i < 6; ++i) {
            BarEntry entry = new BarEntry(i, (i + 1) * 2);
            valueSet1.add(entry);
            ylabels.add(" " + i);
        }

        List<IBarDataSet> dataSets = new ArrayList<>();
        BarDataSet barDataSet = new BarDataSet(valueSet1, " ");
        barDataSet.setColor(Color.CYAN);
        barDataSet.setDrawValues(true);
        dataSets.add(barDataSet);


        BarData data = new BarData(dataSets);
        data.setBarWidth(0.4f);
        data.setValueTextSize(10f);
        data.setValueTextColor(Color.BLACK);
        mChart.setData(data);
        mChart.setFitBars(true);
        mChart.invalidate();
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述