Parcela central: diagtwig de barras con línea horizontal promedio

¿Hay alguna manera de agregar una línea horizontal promedio (o una línea cualquiera) a un gráfico de gráfico de barras usando el marco de gráfico central?

Gracias.

    Una forma de hacerlo es mediante el uso de CPTScatterPlot:

    Agregue las siguientes líneas a su código después de haber inicializado y agregado su diagtwig de barras (o lo que sea su diagtwig de datos real) a su gráfico.

    // Before following code, initialize your data, actual data plot and add plot to graph CPTScatterPlot *dataSourceLinePlot = [[[CPTScatterPlot alloc] init] autorelease]; CPTMutableLineStyle * lineStyle = [CPTMutableLineStyle lineStyle]; lineStyle.lineWidth = 3.f; lineStyle.lineColor = [CPTColor blackColor]; lineStyle.dashPattern = [NSArray arrayWithObjects:[NSNumber numberWithFloat:3.0f], [NSNumber numberWithFloat:3.0f], nil]; dataSourceLinePlot.dataLineStyle = lineStyle; dataSourceLinePlot.identifier = @"horizontalLineForAverage"; dataSourceLinePlot.dataSource = self; [barChart addPlot:dataSourceLinePlot toPlotSpace:plotSpace]; 

    A continuación, agregue los methods de origen de datos, en mi caso he establecido el origen de datos en el código anterior a mí mismo, por lo que estoy definiendo los methods de origen de datos en el mismo file:

     -(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot { // Note this method will return number of records for both my actual plot, and for scattenetworking plot which is used to draw horizontal average line. For latter, this will decide the horizontal length of your line return [myDataArray count]; } -(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index { NSDecimalNumber *num = nil; // If method is called to fetch data about drawing horizontal average line, then return your generated average value. if( plot.identifier==@"horizontalLineForAverage") { if(fieldEnum == CPTScatterPlotFieldX ) { // this line will remain as it is num =(NSDecimalNumber *)[NSDecimalNumber numberWithDouble:index]; } else { num = (NSDecimalNumber *) myDataAverageValue;// Here you generate average value for location of horizontal line. You should edit this line only; } } // handle other cases and return data for other plots return num; } 

    Sí. Agregue un diagtwig de dispersión al gráfico y déle dos puntos de datos, uno en cada extremo de la línea deseada.

      CPTFill *bandFill = [CPTFill fillWithColor:[[CPTColor blackColor] colorWithAlphaComponent:1]]; [y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(800) length:CPTDecimalFromDouble(1.5)] fill:bandFill]]; 

    y

     -(CPTPlotRange *)plotSpace:(CPTPlotSpace *)space willChangePlotRangeTo:(CPTPlotRange *)newRange forCoordinate:(CPTCoordinate)coordinate { if (self.segment.selectedSegmentIndex == 2) { if (coordinate == CPTCoordinateY) { //NSLog(@"%f=>%f",self.yRange.lengthDouble,newRange.lengthDouble); CPTGraph* graph = space.graph; CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet; CPTXYAxis *y = axisSet.yAxis; NSArray *bands = y.backgroundLimitBands; for (CPTLimitBand *band in bands) { [y removeBackgroundLimitBand:band]; } CPTFill *bandFill = [CPTFill fillWithColor:[[CPTColor blackColor] colorWithAlphaComponent:1]]; [y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(800) length:CPTDecimalFromDouble(1.5 * newRange.lengthDouble / 1200)] fill:bandFill]]; } } return newRange; } 

    por favor haga reference a la sección "AxisDemo" de la muestra oficial "Plot_Gallery_iOS"