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 を参照してください。さらに詳細が必要な場合は、お問い合わせください。幸運を!