我想在BarChart
和CombinedChart
上显示左侧轴上的值,例如,如果我有三个值,左轴为10,120,250它应该具有作为参考的表0,100,200和300.而不是这个,我得到的值是默认值,周期为40.我想改变这个中间范围。
我知道如何设置min-max值的范围值,但不知道如何设置中间值的范围。
是否可以在表的左轴修改该中间值范围?
提前致谢!
答案 0 :(得分:1)
不确定我是否正确理解了您的问题的意图,但如果您希望您的轴显示100的倍数值,您可以尝试这样的事情:
YAxis leftAxis = mBarChart.getAxisLeft();
leftAxis.setGranularity(100f);
leftAxis.setGranularityEnabled(true);
有关粒度的详细信息,请参阅setGranularity
和setGranularityEnabled
的文档,并查看this answer。
答案 1 :(得分:0)
是的,可以使用
更改中间范围mBarChart.getAxisLeft().setGranularity(100f);
mBarChart.getAxisLeft().setGranularityEnabled(true);
但是如果要动态设置粒度,则实现IAxisValueFormatter并比较返回值以获取差异并将粒度设置为该差异。
private float yAxisScaleDifference = -1;
private boolean granularitySet = false;
//[10,120,250]
mBarChart.getAxisLeft().setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float v, AxisBase axisBase) {
if(!granularitySet) {
if(yAxisScaleDifference == -1) {
yAxisScaleDifference = v; //10
}
else {
float diff = v - yAxisScaleDifference; //120 - 10 = 110
if(diff >= 1000) {
yAxisLeft.setGranularity(1000f);
}
else if(diff >= 100) {
yAxisLeft.setGranularity(100f); //set to 100
}
else if(diff >= 1f) {
yAxisLeft.setGranularity(1f);
}
granularitySet =true;
}
}
return val;
}
});
另一个例子:
say Y-Axis returns [1200,3400,8000,9000....]
first time: 1200
second time: 3400 - 1200 = 2200
set to 1000
如果差异不均匀,则必须使用数组来存储差异,并使用平均值来获得正确的粒度。