代码之家  ›  专栏  ›  技术社区  ›  Francisco Romero

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

  •  0
  • Francisco Romero  · 技术社区  · 9 年前

    我想在 BarChart CombinedChart 以100为周期。例如,如果我在表格的左轴上有三个值,分别是10、120、250,那么它应该引用值0、100、200和300。相反,我将以40为周期的值作为默认值。我想更改这个中间范围。

    我知道如何设置最小最大值的范围值,但不知道如何设置中间值的范围。

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

    提前谢谢!

    2 回复  |  直到 9 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

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

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

    参见文档了解 setGranularity setGranularityEnabled this answer .

        2
  •  0
  •   Extremis II    8 年前

    是的,可以使用更改中间范围

    mBarChart.getAxisLeft().setGranularity(100f);
    mBarChart.getAxisLeft().setGranularityEnabled(true);
    

            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