问题
I am using core-plot library to plot a graph in 3 different view..Problem is among all of 3 only 3rd graph get displayed correctly...But if I draw each graph separately then they always shows up right..Any clue would be of great help .Thanks
//In ViewWillAppear
-(void) viewWillAppear:(BOOL)animated
{
dataPoints = [[NSMutableArray alloc]init];
// Create graph from theme
CPTgraph1 = [(CPTXYGraph *)[CPTXYGraph alloc] initWithFrame:CGRectZero];
CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme];
[CPTgraph1 applyTheme:theme];
CPTXYPlotSpace *plotSpace1;
plotSpace1= (CPTXYPlotSpace *)CPTgraph1.defaultPlotSpace;
CPTScatterPlot *dataSourceLinePlot1 = [(CPTScatterPlot *)[CPTScatterPlot alloc] initWithFrame:CPTgraph1.bounds];
CPTgraph2 = [(CPTXYGraph *)[CPTXYGraph alloc] initWithFrame:CGRectZero];
//CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme];
[CPTgraph2 applyTheme:theme];
CPTXYPlotSpace *plotSpace2;
plotSpace2= (CPTXYPlotSpace *)CPTgraph2.defaultPlotSpace;
CPTScatterPlot *dataSourceLinePlot2 = [(CPTScatterPlot *)[CPTScatterPlot alloc] initWithFrame:CPTgraph2.bounds];
CPTgraph3 = [(CPTXYGraph *)[CPTXYGraph alloc] initWithFrame:CGRectZero];
//CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme];
[CPTgraph3 applyTheme:theme];
CPTXYPlotSpace *plotSpace3;
plotSpace3= (CPTXYPlotSpace *)CPTgraph3.defaultPlotSpace;
CPTScatterPlot *dataSourceLinePlot3 = [(CPTScatterPlot *)[CPTScatterPlot alloc] initWithFrame:CPTgraph3.bounds];
[self plotGraph:graph1 withData:"SomeData" withGraph:CPTgraph1 withPlotSpace:plotSpace1 withCPTScatterPlot:dataSourceLinePlot1];
[self plotGraph:graph2 withData:"Some Data" withGraph:CPTgraph2 withPlotSpace:plotSpace2 withCPTScatterPlot:dataSourceLinePlot2];
[self plotGraph:graph3 withData:"Some Data" withGraph:CPTgraph3 withPlotSpace:plotSpace3 withCPTScatterPlot:dataSourceLinePlot3];
}
-(void)plotGraph :(CPTGraphHostingView *)graphView withData:(NSMutableArray*)refData withGraph:(CPTXYGraph *) graph withPlotSpace:(CPTXYPlotSpace *) plotSpace withCPTScatterPlot:(CPTScatterPlot *)dataSourceLinePlot
{
[self readFromData:refData];
graphView.hostedGraph = graph;
graph.paddingLeft = 0.0;
graph.paddingTop = 0.0;
graph.paddingRight = 0.0;
graph.paddingBottom = 0.0;
graph.plotAreaFrame.paddingLeft = 10.0;
graph.plotAreaFrame.paddingTop = 10.0;
graph.plotAreaFrame.paddingRight = 10.0;
graph.plotAreaFrame.paddingBottom = 10.0;
graph.plotAreaFrame.plotArea.fill = graph.plotAreaFrame.fill;
graph.plotAreaFrame.fill = nil;
graph.plotAreaFrame.borderLineStyle = nil;
graph.plotAreaFrame.cornerRadius = 0.0;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(minimumValueForXAxis)
length:CPTDecimalFromDouble( maximumValueForXAxis)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(minimumValueForYAxis)
length:CPTDecimalFromDouble(ceil( (maximumValueForYAxis - minimumValueForYAxis) / majorIntervalLengthForY ) * majorIntervalLengthForY)];
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
// Grid line styles
CPTMutableLineStyle *majorGridLineStyle = [CPTMutableLineStyle lineStyle];
majorGridLineStyle.lineWidth = 0.75;
majorGridLineStyle.lineColor = [[CPTColor colorWithGenericGray:0.2] colorWithAlphaComponent:0.75];
CPTMutableLineStyle *minorGridLineStyle = [CPTMutableLineStyle lineStyle];
minorGridLineStyle.lineWidth = 0.25;
minorGridLineStyle.lineColor = [[CPTColor whiteColor] colorWithAlphaComponent:0.1];
CPTXYAxis *x = axisSet.xAxis;
x.minorTicksPerInterval = 9;
x.majorIntervalLength = CPTDecimalFromDouble(majorIntervalLengthForX);
x.labelOffset = 5.0;
x.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];
CPTXYAxis *y = axisSet.yAxis;
y.minorTicksPerInterval = 9;
y.majorIntervalLength = CPTDecimalFromDouble(majorIntervalLengthForY);
y.labelOffset = 5.0;
y.majorGridLineStyle = majorGridLineStyle;
y.minorGridLineStyle = minorGridLineStyle;
y.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];
dataSourceLinePlot.identifier = @"Data Source Plot";
CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy];
lineStyle.lineWidth = 1.0;
lineStyle.lineColor = [CPTColor orangeColor];
dataSourceLinePlot.dataLineStyle = lineStyle;
dataSourceLinePlot.dataSource = self;
[graph addPlot:dataSourceLinePlot toPlotSpace:plotSpace];
}
Method readFromData will just calculate the x , y values and store it in dataPoints array.
Just elaborate a bit more...graph does shows up in first and second views but seems out of range cause i can only see part of it...but the third graph gets displayed correctly..i guess it has something to do with range or axis..
回答1:
All three plots use the same plot ranges for their plot spaces. Does your plot data fit in that range? If not, you'll need to calculate different plot ranges for each graph.
来源:https://stackoverflow.com/questions/16280138/not-able-to-plot-3-graphs-in-3-different-views-using-core-plot-ios