iOS CorePlot - 线图在x轴上显示日期,在y轴上显示双数字

时间:2012-05-24 15:36:47

标签: iphone ios core-plot

我需要帮助使用CorePlot绘制日期与数字图表。我已经查看了DatePlot。但我的要求有点不同,如下所示。

我有一个对象数组,其中每个对象都有一个NSDate和一个Double数字。  例如:   5个对象的数组:( NSDate格式为yyyy-mm-dd)

  • Object1 - 2012-05-01 - 10.34
  • Object2 - 2012-05-02 - 10.56
  • Object3 - 2012-05-03 - 10.12
  • Object4 - 2012-05-04 - 10.78
  • Object5 - 2012-05-05 - 10.65

此数据来自服务,每次都会有所不同。

请告知。

1 个答案:

答案 0 :(得分:4)

我使用CPTScatterPlot来显示与您类似的时间序列数据图表。

您需要创建一个数据源类,在绘制图形时将由核心图查询。我的数据源对象包含NSArray个具有两个属性的对象:observationDateobservationValue。该类必须实现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;
}

请注意,我将日期转换为双倍日期 - 无法直接绘制日期。我在类上实现了其他方法来返回值,例如时间序列的开始和结束日期以及最小/最大值 - 这些在配置图形的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。如果您需要更多详细信息,请询问。祝你好运!