iOS CorePlot – Gráfico de línea con date en el eje x y numbers dobles en el eje y

Necesito ayuda para graficar charts de date y número usando CorePlot. Ya he verificado DatePlot. Pero mi requisito es un poco diferente, que es el siguiente.

Tengo una matriz de objects donde cada object tiene un NSDate y un número doble. Por ejemplo: matriz de 5 objects: (NSDate en formatting yyyy-mm-dd)

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

Estos datos provienen de un service y difieren cada vez.

Por favor avise.

Utilicé un CPTScatterPlot para mostrar un gráfico de datos de series temporales como el tuyo.

Debe crear una class de origen de datos que será consultada por el diagtwig central cuando dibuja el gráfico. Mi object fuente de datos contiene un NSArray de objects con dos attributes: observationDate y observationValue . La class tiene que implementar el protocolo CPTPlotDataSource . Estos son los methods de protocolo que implementé:

 #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; } 

Tenga en count que estoy convirtiendo la date en una doble: las dates no se pueden graficar directamente. Implemento otros methods en la class para devolver valores tales como las dates de inicio y finalización de la serie de time y los valores de min / max, que son útiles al configurar el PlotSpace de su gráfico.

Una vez que haya inicializado su fuente de datos, entonces la asignará a la propiedad dataSource de su CPTScatterPlot:

 ... 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]; ... 

Eche un vistazo a la CPTTestApp en la descarga de la ttwig central para get detalles sobre la configuration de su gráfico y espacio de diagtwig. Si necesita más detalles, pregunte. ¡Buena suerte!