0

我正在使用 core-plot 库在 3 个不同的视图中绘制图形。问题是在所有 3 个图形中,只有第 3 个图形可以正确显示...但是如果我分别绘制每个图形,那么它们总是正确显示。任何线索都会有很大的帮助。谢谢

  //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];


}

方法 readFromData 只会计算 x , y 值并将其存储在 dataPoints 数组中。

再详细说明一下...图表确实显示在第一和第二个视图中,但似乎超出了范围,因为我只能看到其中的一部分...但是第三个图表可以正确显示..我想它与范围或轴..

阴谋

4

1 回答 1

1

所有三个地块都为其绘图空间使用相同的绘图范围。您的绘图数据是否适合该范围?如果没有,您需要为每个图表计算不同的绘图范围。

于 2013-04-30T00:56:51.633 回答