iPhone CorePlot正确格式化y轴

时间:2011-11-07 20:34:21

标签: iphone core-plot

我正在使用CorePlot来绘制一组数据。我的x轴的数据由日期组成,而我的y轴的数据由浮点数组成(然后我将其转换为NSNumber)。我从Feed中获取数据,并且Feed返回具有大量小数的数字,例如:0.46673718852844,4.59392222219,353.1293012045。 我正在使用以下代码来正确格式化y轴:

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:3];
[numberFormatter setPositiveFormat:@"###0.000"];    
CPTXYAxis *y = axisSet.yAxis;
y.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
y.minorTicksPerInterval = 1;
y.preferredNumberOfMajorTicks = 5;
y.labelFormatter = numberFormatter;

在大多数情况下,一切正常。但是,有时它会沿轴的多个位置显示相同的值。见下图:

enter image description here

值正确显示,我只想避免不必要的(0.466)标签。我甚至试图在numberForPlot方法中将数字四舍五入到小数位数:

if(fieldEnum == CPTScatterPlotFieldY)
{ 
        float floatNum = r.value;
        floatNum *= 1000;
        int intValue = (int) floatNum;
        float decimal = floatNum - intValue;
        if (decimal > 0.5) {
            intValue++;
        }
        floatNum = intValue /1000.0;
        return [NSNumber numberWithFloat:floatNum];

}

但标签没有区别。

3 个答案:

答案 0 :(得分:1)

preferredNumberOfMajorTicks属性告诉标记算法要使用多少刻度线。如果您想要三个刻度,请将其设置为3.您还可以增加数字格式化程序的最大小数位数,以避免完全舍入问题。

答案 1 :(得分:0)

我相信,因为你已经说过你需要5个主要滴答,这就是你要得到的,无论y轴值有多近。如果您感觉这些值太靠近,则可能需要调整您的preferredNumberOfMajorTicks属性。

在我的应用中,我正在使用Core Plot,我关闭了自动轴标签,我正在整理自己的x和y轴标签。这是一项更多的工作,但我喜欢自己做的灵活性。

答案 2 :(得分:0)

我在这里做的是在绘制图表时动态设置我的preferredNumberOfMajorTicks属性。由于我的格式化程序显示3个小数位,因此我使用以下代码根据Y轴范围更改刻度数,以便格式化程序在每个刻度线的轴上显示唯一值。太多刻度表示小数位被切断,Y轴上有重复值。

            CPTXYAxis *y          = axisSet.yAxis;
            {
                y.preferredNumberOfMajorTicks = round([newYRange.length floatValue]/0.001);
            }

我希望这会有所帮助。