2011-11-07 9 views
7

CorePlotを使用してデータセットをグラフ化しています。私のx軸のデータは日付で構成され、y軸のデータは浮動小数点数(NSNumberに変換されます)で構成されます。私はフィードからデータを取得しています。フィードは、例えば、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)ラベルを避けたいです。私も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]; 

} 

が、ラベルに違いはありません。

答えて

1

プロパティpreferredNumberOfMajorTicksは、ラベリングアルゴリズムに使用する目盛りの数を示します。 3つの目盛りが必要な場合は、3に設定します。数値フォーマッタの最大小数点数を増やして、丸めの問題を回避することもできます。

+0

というのは、これが私のアプリケーションの唯一のグラフではなく、5ティックが通常最もよく見えるということです。数字のあるものと同じもの - 通常は3つで十分であり、4桁を表示する必要はありません。ああ、私はグラフのいくつかの手動設定を行う必要がありますね。とにかくありがとう – Maggie

+0

私の解決策は、軸の範囲に応じて動的にティックの数を変更することでした。 – Jackson

0

私は、5つの大きな目盛がほしいと言ってきたので、それはあなたが得ようとしていることです。値が近すぎると感じる場合は、おそらくpreferredNumberOfMajorTicksプロパティを調整する必要があります。

私のアプリでは、私はCore Plotを使用していますが、私は自動軸ラベルを無効にして、自分のx軸ラベルとY軸ラベルを組み立てています。それはもう少し仕事ですが、私はそれを自分でやる柔軟性が好きです。

+0

ラベルを手動で設定するにはどのlabelingPolicyを使用しますか? – Maggie

+0

@maggie少し遅れていますが、CPTAxisLabelingPolicyNone –

0

私がここで行ったことは、グラフがプロットされている間、私のpreferredNumberOfMajorTicksプロパティを動的に設定しました。私のフォーマッタは小数点以下3桁を示しているので、次のコードを使ってY軸の範囲に応じて目盛りの数を変えて、目盛りごとに軸上に一意の値を表示します。ティックが多すぎると、小数点以下が切り捨てられ、Y軸に重複した値があることを意味します。

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

これが役立ちます。

関連する問題