如何在MPAndroidChart的左轴上设置中间值的句点?

时间:2016-08-23 08:24:49

标签: android mpandroidchart

我想在BarChartCombinedChart上显示左侧轴上的值,例如,如果我有三个值,左轴为10,120,250它应该具有作为参考的表0,100,200和300.而不是这个,我得到的值是默认值,周期为40.我想改变这个中间范围。

我知道如何设置min-max值的范围值,但不知道如何设置中间值的范围。

是否可以在表的左轴修改该中间值范围?

提前致谢!

2 个答案:

答案 0 :(得分:1)

不确定我是否正确理解了您的问题的意图,但如果您希望您的轴显示100的倍数值,您可以尝试这样的事情:

YAxis leftAxis = mBarChart.getAxisLeft();
leftAxis.setGranularity(100f);
leftAxis.setGranularityEnabled(true);

有关粒度的详细信息,请参阅setGranularitysetGranularityEnabled的文档,并查看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

如果差异不均匀,则必须使用数组来存储差异,并使用平均值来获得正确的粒度。