2011-11-07 137 views
7

我正在使用CorePlot绘制一组数据。我的x轴的数据由日期组成,而我的y轴的数据由浮点数组成(然后我变成NSNumber)。我从Feed中获取数据,并且Feed会返回具有大量小数的数字,例如:0.46673718852844,4.59392222219,353.1293012045。 我使用下面的代码来正确地格式化Y轴:iPhone CorePlot 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)标签。我甚至一直在努力,数字四舍五入到3位小数在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]; 

} 

但在标签中没有什么区别。

回答

1

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

+0

问题是这不是我的应用程序中的唯一图形,并且5个刻度通常看起来最好。数字相同的事情 - 三个通常就足够了,不需要显示4位数字。啊,猜猜我必须做一些手动设置的图表。无论如何,感谢 – Maggie

+0

我的解决方案是根据轴范围动态更改滴答的数量。 – Jackson

0

我相信因为你说你想要5个主要的蜱虫,那就是你将要得到的东西,而不管它的y轴有多接近。如果您觉得这些值太靠近,您可能需要调整您的preferredNumberOfMajorTicks属性。

在我使用Core Plot的应用程序中,我关闭了自动轴标签,并将自己的x和y轴标签放在一起。这是一个更多的工作,但我喜欢自己做这件事的灵活性。

+0

什么标签政策你用来手动设置标签? – Maggie

+0

@maggie在这里稍晚,但这将是:CPTAxisLabelingPolicyNone –

0

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

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

我希望这会有所帮助。