iPhone CorePlot合适的Y轴格式化

7

我正在使用CorePlot绘制一组数据。我的x轴数据由日期组成,而y轴数据由浮点数组成(我将其转换为NSNumber)。我从一个源中获取数据,该源返回带有大量小数的数字,例如: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 方法中将数字四舍五入到3位小数:
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个回答

1

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


问题在于这不是我应用程序中唯一的图表,而且5个刻度通常看起来最好。数字也是一样-三个通常就足够了,没有必要显示4个数字。啊,我想我将不得不手动设置图表。无论如何,还是谢谢。 - Maggie
我的解决方案是根据轴范围动态更改刻度数。 - Jackson

0

我相信你想要5个主刻度,无论y轴的值有多接近,你都会得到它。如果你感觉值太接近了,你可能需要调整你的preferredNumberOfMajorTicks属性。

在我使用Core Plot的应用程序中,我关闭了自动轴标签,并组合了自己的x和y轴标签。这需要更多的工作,但我喜欢自己做的灵活性。


@maggie 有点晚了,但是正确的翻译应该是:CPTAxisLabelingPolicyNone。 - Brian Sachetta

0
在这里我所做的是在绘制图表时动态设置我的preferredNumberOfMajorTicks属性。由于我的格式化程序显示3位小数,我使用以下代码根据Y轴范围更改刻度线的数量,以便格式化程序在每个刻度线上显示唯一值。太多的刻度线意味着小数点会被截断,并且Y轴上会有重复的值。
            CPTXYAxis *y          = axisSet.yAxis;
            {
                y.preferredNumberOfMajorTicks = round([newYRange.length floatValue]/0.001);
            }

希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接