2011-11-07 125 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); 
      } 

我希望這會有所幫助。