Not able to plot 3 graphs in 3 different views using core-plot iOS

只谈情不闲聊 提交于 2020-01-17 03:11:07

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!