无法同时显示两个CorePlotgraphics

我遇到了在同一视图中显示两个不同CorePlot图的问题。 我已经在我的视图中设置了两个托pipe视图,并且所有参考插口都已正确连接。 只有一个图显示正确。 将一个快速NSLog添加到numberForPlot方法显示只有第一个图正在填充( graphgraphView ),而不是第二个( trendtrendView )。 代码如下:

 - (void) graphSetup { CPTTheme *theme = [CPTTheme themeNamed:kCPTPlainWhiteTheme]; graph = (CPTXYGraph *)[theme newGraph]; graphView.hostedGraph = graph; graphView.allowPinchScaling = YES; graph.paddingLeft = -5; graph.paddingTop = 0; graph.paddingRight = -5; graph.paddingBottom = -5; graph.fill = nil; graph.plotAreaFrame.fill = nil; int a = 0; for (int i = 0; i < [romAveragesArray count]; i++) { if ([romAveragesArray objectAtIndex:i] != NULL) a++; } int localMax = 0; int localMin = 0; for (int a = 0; a < [romAveragesArray count]; a++) { if ([[romAveragesArray objectAtIndex:a] getValue] > localMax) localMax = [[romAveragesArray objectAtIndex:a] getValue]; else if ([[romAveragesArray objectAtIndex:a] getValue] < localMin) localMin = [[romAveragesArray objectAtIndex:a] getValue]; } for (int a = 0; a < [obaAveragesArray count]; a++) { if ([[obaAveragesArray objectAtIndex:a] getValue] > localMax) localMax = [[obaAveragesArray objectAtIndex:a] getValue]; else if ([[obaAveragesArray objectAtIndex:a] getValue] < localMin) localMin = [[obaAveragesArray objectAtIndex:a] getValue]; } CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace; plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0) length:CPTDecimalFromInt(145)]; NSLog(@"%d",a); plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0) length:CPTDecimalFromInt(localMax+15)]; CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet; CPTXYAxis *x = axisSet.xAxis; x.majorIntervalLength = CPTDecimalFromFloat(10); x.minorTicksPerInterval = 2; x.borderWidth = 0; x.labelExclusionRanges = [NSArray arrayWithObjects: [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-100) length:CPTDecimalFromFloat(300)], nil];; CPTXYAxis *y = axisSet.yAxis; y.majorIntervalLength = CPTDecimalFromFloat(10); y.minorTicksPerInterval = 1; y.labelExclusionRanges = [NSArray arrayWithObjects: [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-100) length:CPTDecimalFromFloat(300)], nil]; CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init]; dataSourceLinePlot.identifier = @"Obama"; dataSourceLinePlot.dataSource = self; CPTMutableLineStyle *style = [CPTMutableLineStyle lineStyle]; style.lineColor = [CPTColor colorWithComponentRed:0.3215686274509804 green:0.6078431372549019 blue:1.0 alpha:1.0]; dataSourceLinePlot.dataLineStyle = style; [graph addPlot:dataSourceLinePlot]; CPTScatterPlot *dataSourceLinePlot1 = [[CPTScatterPlot alloc] init]; dataSourceLinePlot1.identifier = @"Rom"; dataSourceLinePlot1.dataSource = self; CPTMutableLineStyle *style1 = [CPTMutableLineStyle lineStyle]; style1.lineColor = [CPTColor colorWithComponentRed:0.9803921568627451 green:0.47058823529411764 blue:0.47058823529411764 alpha:1.0]; dataSourceLinePlot1.dataLineStyle = style1; [graph addPlot:dataSourceLinePlot1]; [self trendSetup]; [self postStats]; } - (void) trendSetup { CPTTheme *theme1 = [CPTTheme themeNamed:kCPTPlainWhiteTheme]; trend = (CPTXYGraph *) [theme1 newGraph]; trendView.allowPinchScaling = YES; trendView.hostedGraph = trend; trend.paddingLeft = -5; trend.paddingRight = -5; trend.paddingTop = 0; trend.paddingBottom = -5; trend.fill = nil; trend.plotAreaFrame.fill = nil; int obaMax, localMax; for (int i = 0; i < [obaArray count]; i++) obaMax += [[obaArray objectAtIndex:i] getValue]; int romMax; for (int i = 0; i < [romArray count]; i++) romMax += [[romArray objectAtIndex:i] getValue]; if (romMax > obaMax) localMax = romMax; else localMax = obaMax; CPTXYPlotSpace *trendSpace = (CPTXYPlotSpace *)trend.defaultPlotSpace; trendSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0) length:CPTDecimalFromInt(504)]; trendSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0) length:CPTDecimalFromInt(localMax)]; CPTXYAxisSet *trendSet = (CPTXYAxisSet *)trend.axisSet; CPTXYAxis *trendX = trendSet.xAxis; trendX.majorIntervalLength = CPTDecimalFromInt(10); trendX.minorTicksPerInterval = 2; trendX.borderWidth = 0; trendX.labelExclusionRanges = [NSArray arrayWithObjects:[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-100) length:CPTDecimalFromFloat(300)], nil];; CPTXYAxis *trendY = trendSet.xAxis; trendY.majorIntervalLength = CPTDecimalFromInt(10); trendY.minorTicksPerInterval = 2; trendY.borderWidth = 0; trendY.labelExclusionRanges = [NSArray arrayWithObjects:[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-100) length:CPTDecimalFromFloat(300)], nil];; CPTScatterPlot *trendSourceLinePlot = [[CPTScatterPlot alloc] init]; trendSourceLinePlot.identifier = @"Obama Trend"; trendSourceLinePlot.dataSource = self; CPTMutableLineStyle *style3 = [CPTMutableLineStyle lineStyle]; style3.lineColor = [CPTColor colorWithComponentRed:0.3215686274509804 green:0.6078431372549019 blue:1.0 alpha:1.0]; trendSourceLinePlot.dataLineStyle = style3; [trend addPlot:trendSourceLinePlot]; CPTScatterPlot *trendSourceLinePlot1 = [[CPTScatterPlot alloc] init]; trendSourceLinePlot1.identifier = @"Rom Trend"; trendSourceLinePlot1.dataSource = self; CPTMutableLineStyle *style4 = [CPTMutableLineStyle lineStyle]; style4.lineColor = [CPTColor colorWithComponentRed:0.9803921568627451 green:0.47058823529411764 blue:0.47058823529411764 alpha:1.0]; trendSourceLinePlot1.dataLineStyle = style4; [trend addPlot:trendSourceLinePlot1]; } 

这里是我发现你的代码不太对,我认为这就是Eric问你是否两个托pipe视图都可见的原因。

您正在创build两个CPTXYGraph一个叫graph另一个叫trend 。 我不知道如何在Interface Builder中设置视图,但是我不会创build两个CPTXYGraph 。 我会将trendSourceLinePlottrendSourceLinePlot1添加到trendgraph

我想,你需要做的是把它们呈现在同一个CPTXYGraph 。 所以,这是我的build议…

  1. trentSetup删除以下行

     CPTTheme *theme1 = [CPTTheme themeNamed:kCPTPlainWhiteTheme]; trend = (CPTXYGraph *) [theme1 newGraph]; trendView.allowPinchScaling = YES; trendView.hostedGraph = trend; trend.paddingLeft = -5; trend.paddingRight = -5; trend.paddingTop = 0; trend.paddingBottom = -5; trend.fill = nil; trend.plotAreaFrame.fill = nil; 
  2. 更换以下几行

     [trend addPlot:trendSourceLinePlot]; [trend addPlot:trendSourceLinePlot1]; 

    分别与

     [graph addPlot:trendSourceLinePlot]; [graph addPlot:trendSourceLinePlot1]; 

它也应该加快装载过程。

图表的Y范围太长了。 我删除了刻度线部分的部分,现在它立即更新。