Пример сгруппированной гистограммы с использованием основного графика iphone? - PullRequest
0 голосов
/ 15 мая 2011

Я хочу знать, как создать сгруппированную гистограмму? Я пытался, но получил только одну гистограмму.

Ниже мой код, подскажите мне, в чем ошибка.

Спасибо

-(void)viewDidLoad {

    [super viewDidLoad];

[self generateDataSamples];

double xAxisStart = 0;
double xAxisLength = [samples count];

double yAxisStart = 0;
double yAxisLength = [[samples valueForKeyPath:@"@max.Y_VAL"] doubleValue];




    NSLog(@"xAxisLength===%f",xAxisLength);

    NSLog(@"yAxisLength===%f",yAxisLength);


CPGraphHostingView *hostingView = [[CPGraphHostingView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:hostingView];

CPXYGraph *graph = [[CPXYGraph alloc] initWithFrame:self.view.bounds];
hostingView.hostedGraph = graph;


CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(xAxisStart)
                                               length:CPDecimalFromDouble(xAxisLength+1)];

plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(yAxisStart)
                                               length:CPDecimalFromDouble(yAxisLength)];    


graph.plotAreaFrame.borderLineStyle = nil;
graph.plotAreaFrame.cornerRadius = 0.0f;

// Paddings
graph.paddingLeft = 0.0f;
graph.paddingRight = 0.0f;
graph.paddingTop = 0.0f;
graph.paddingBottom = 0.0f;

graph.plotAreaFrame.paddingLeft = 70.0;
graph.plotAreaFrame.paddingTop = 20.0;
graph.plotAreaFrame.paddingRight = 20.0;
graph.plotAreaFrame.paddingBottom = 80.0;




CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet;

CPXYAxis *y = axisSet.yAxis;

     y.majorIntervalLength = CPDecimalFromString(@"1");
     y.orthogonalCoordinateDecimal = CPDecimalFromString(@"0");
 y.title = @"Y Axis";
 y.titleOffset = 45.0f;
     y.titleLocation = CPDecimalFromFloat(3.0f);



//first bar
CPBarPlot *plot = [[CPBarPlot alloc]  initWithFrame:CGRectZero];
plot.plotRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(0.0)
                                             length:CPDecimalFromDouble(xAxisLength)];

CPFill* cpFill = [[CPFill alloc] initWithColor:[CPColor greenColor]];
    plot.barOffset = CPDecimalFromFloat(0.25f);
plot.fill = cpFill;
plot.dataSource = self;
plot.identifier=@"plot1";
[graph addPlot:plot toPlotSpace:plotSpace];

//second bar

plot.plotRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(1.0)
                                             length:CPDecimalFromDouble(xAxisLength)];

CPFill* cpFill1 = [[CPFill alloc] initWithColor:[CPColor lightGrayColor]];  
plot.fill = cpFill1;
plot.dataSource = self;
plot.identifier=@"plot2";
[graph addPlot:plot toPlotSpace:plotSpace];


[graph addPlot:plot];
[plot release];
[graph release];
[hostingView release];
}

1 Ответ

1 голос
/ 15 мая 2011

Вы никогда не создавали второй объект графика - ваш код просто добавляет один и тот же объект на график дважды.Вы также должны убедиться, что используете другой barOffset для второго графика.Если вы не используете сборщик мусора, следите за управлением памятью.Код в вашем вопросе имеет несколько утечек памяти.

...