MpAndroidChart在条形图中获得零值线

时间:2017-06-07 09:08:36

标签: android charts bar-chart mpandroidchart

我使用MPAndroidChart作为条形图。 其实我有这种情况: enter image description here

对于前2个值我有0.0但我想要绘制蓝线也为零值,如下所示: enter image description here

我通过获得最大值的非常低百分比来获得此结果,但我想以0.0显示该行而不显示0.5。 如果值为0.0,我不想更改它以显示该行。有办法吗?一些想法?

这是我的条形图的设置:

   YAxis leftAxis = barChart.getAxisLeft();
  leftAxis.setAxisMinimum(0f);

    barChart.setDrawBarShadow(false);
    barChart.getDescription().setEnabled(false);
    barChart.setPinchZoom(false);
    barChart.setDrawGridBackground(false);
    barChart.setScaleEnabled(false);
    barChart.getLegend().setEnabled(false);
    barChart.getXAxis().setDrawAxisLine(false);
    barChart.getXAxis().setDrawGridLines(false);
    barChart.getAxis(YAxis.AxisDependency.LEFT).setEnabled(true);
 barChart.getAxis(YAxis.AxisDependency.LEFT).setDrawGridLines(false);
    barChart.getAxis(YAxis.AxisDependency.LEFT).setDrawLabels(false);
    barChart.getAxis(YAxis.AxisDependency.RIGHT).setEnabled(false);
    barChart.getXAxis().setDrawLabels(false);
    barChart.setDrawValueAboveBar(true);

由于

1 个答案:

答案 0 :(得分:1)

您可以通过编写自定义IValueFormatter来解决此问题,该自定义fork会将小于给定金额的y值降至零。然后,y值将在0.5f呈现,但标记为0.0

这是一个非常粗略的例子,改编自项目中的DefaultValueFormatter

import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.utils.ViewPortHandler;

import java.text.DecimalFormat;

public class FlooringValueFormatter implements IValueFormatter
{

    protected DecimalFormat mFormat;

    protected int mDecimalDigits;
    protected float mMinimum;

    public FlooringValueFormatter(int digits, float minimum) {
        setup(digits);
        this.mMinimum = minimum;
    }

    public void setup(int digits) {

        this.mDecimalDigits = digits;

        StringBuffer b = new StringBuffer();
        for (int i = 0; i < digits; i++) {
            if (i == 0)
                b.append(".");
            b.append("0");
        }

        mFormat = new DecimalFormat("###,###,###,##0" + b.toString());
    }

    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
        if (value < mMinimum) {
            return mFormat.format(0);
        }

        return mFormat.format(value);
    }

    public int getDecimalDigits() {
        return mDecimalDigits;
    }
}

这样消费:

barData.setValueFormatter(new FlooringValueFormatter(2, 0.5f));