3

CorePlot を使用して日付と数値のグラフをプロットする際に助けが必要です。私はすでに DatePlot をチェックアウトしました。しかし、私の要件は次のように少し異なります。

各オブジェクトが NSDate と Double の数値を持っているオブジェクトの配列があります。例: 5 つのオブジェクトの配列: (yyyy-mm-dd 形式の NSDate)

  • オブジェクト 1 - 2012 年 5 月 1 日 - 10.34
  • オブジェクト 2 - 2012 年 5 月 2 日 - 10.56
  • Object3 - 2012 年 5 月 3 日 - 10.12
  • Object4 - 2012 年 5 月 4 日 - 10.78
  • Object5 - 2012 年 5 月 5 日 - 10.65

このデータはサービスから取得され、毎回異なります。

お知らせ下さい。

4

1 に答える 1

4

CPTScatterPlotあなたのような時系列データのグラフを表示するために を使用しました。

グラフの描画時にコア プロットによってクエリされるデータ ソース クラスを作成する必要があります。私のデータ ソース オブジェクトには、NSArrayと の 2 つの属性を持つobservationDateオブジェクトの が含まれていますobservationValue。クラスはCPTPlotDataSourceプロトコルを実装する必要があります。これらは私が実装したプロトコルメソッドです:

#pragma mark- CPPlotDataSource protocol methods
- (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot
{
   // return the number of objects in the time series
   return [self.timeSeries count];
}

-(NSNumber *)numberForPlot:(CPTPlot *)plot 
                     field:(NSUInteger)fieldEnum 
               recordIndex:(NSUInteger)index 
{
  NSNumber * result = [[NSNumber alloc] init];
  // This method returns x and y values.  Check which is being requested here.
  if (fieldEnum == CPTScatterPlotFieldX)
  { 
    // x axis - return observation date converted to UNIX TS as NSNumber
    NSDate * observationDate = [[self.timeSeries objectAtIndex:index] observationDate];
    NSTimeInterval secondsSince1970 = [observationDate timeIntervalSince1970];
    result = [NSNumber numberWithDouble:secondsSince1970]; 
  }
  else
  { 
    // y axis - return the observation value
    result = [[self.timeSeries objectAtIndex:index] observationValue];
  }
  return result;
}

日付を double に変換していることに注意してください。日付を直接プロットすることはできません。クラスに他のメソッドを実装して、時系列の開始日と終了日、および最小/最大値などの値を返します。これらは、グラフの PlotSpace を構成するときに役立ちます。

データ ソースを初期化したら、それを CPTScatterPlot の dataSource プロパティに割り当てます。

...
CPTXYGraph * myGraph = [[CPTXYGraph alloc] initWithFrame:self.bounds];

// define your plot space here (xRange, yRange etc.)
...

CPTScatterPlot * myPlot = [[CPTScatterPlot alloc] initWithFrame:graph.defaultPlotSpace.accessibilityFrame];

// graphDataSource is your data source class
myPlot.dataSource = graphDataSource;
[myGraph addPlot:myPlot];
...

グラフとプロットスペースの構成の詳細については、コア プロット ダウンロードの CPTTestApp を参照してください。さらに詳細が必要な場合は、お問い合わせください。幸運を!

于 2012-05-24T21:43:03.447 に答える