我使用MPAndroidChart作为条形图。 其实我有这种情况:
我通过获得最大值的非常低百分比来获得此结果,但我想以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);
由于
答案 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));