2012-01-27 9 views
0

同じページに2つのデータwrtの時間をプロットしようとしているので、2つの異なるX軸とY軸が必要です。ここでは、私が作業しているサンプルコードです:1つのビューページでコアプロットの2つの異なるプロットの2つのX軸を作成

-(void)initialisePlot 
{ 
// Start with some simple sanity checks before we kick off 
if ((self.hostingView == nil) || (self.graphData == nil)) { 
    NSLog(@"TUTSimpleScatterPlot: Cannot initialise plot without hosting view or data."); 
    return; 
} 

if (self.graph != nil) { 
    NSLog(@"TUTSimpleScatterPlot: Graph object already exists."); 
    return; 
} 

// Create a graph object which we will use to host just one scatter plot. 
CGRect frame = [self.hostingView bounds]; 
self.graph = [[CPTXYGraph alloc] initWithFrame:frame]; 

// Add some padding to the graph, with more at the bottom for axis labels. 
self.graph.plotAreaFrame.paddingTop = 20.0f; 
self.graph.plotAreaFrame.paddingRight = 20.0f; 
self.graph.plotAreaFrame.paddingBottom = 50.0f; 
self.graph.plotAreaFrame.paddingLeft= 20.0f; 

// Tie the graph we've created with the hosting view. 
self.hostingView.hostedGraph = self.graph; 

// If you want to use one of the default themes - apply that here. 
[self.graph applyTheme:[CPTTheme themeNamed:kCPTPlainWhiteTheme]]; 

// Create a line style that we will apply to the axis and data line. 
CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; 
lineStyle.lineColor = [CPTColor redColor]; 
lineStyle.lineWidth = 2.0f; 

// Create a text style that we will use for the axis labels. 
CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; 
textStyle.fontName = @"Helvetica"; 
textStyle.fontSize = 14; 
textStyle.color = [CPTColor blackColor]; 

// Create the plot symbol we're going to use. 
CPTPlotSymbol *plotSymbol = [CPTPlotSymbol hexagonPlotSymbol]; 
plotSymbol.lineStyle = lineStyle; 
plotSymbol.size = CGSizeMake(8.0, 8.0); 


// Setup some floats that represent the min/max values on our axis. 
float xAxisMin = -10; 
float xAxisMax = 10; 
float yAxisMin = 0; 
float yAxisMax = 100; 

// We modify the graph's plot space to setup the axis' min/max values. 
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; 
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xAxisMin) length:CPTDecimalFromFloat(xAxisMax - xAxisMin)]; 
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromFloat(yAxisMax - yAxisMin)]; 

// Modify the graph's axis with a label, line style, etc. 
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet; 


axisSet.xAxis.title = @"Data X"; 
axisSet.xAxis.titleTextStyle = textStyle; 
axisSet.xAxis.titleOffset = 30.0f; 
axisSet.xAxis.axisLineStyle = lineStyle; 
axisSet.xAxis.majorTickLineStyle = lineStyle; 
axisSet.xAxis.minorTickLineStyle = lineStyle; 
axisSet.xAxis.labelTextStyle = textStyle; 
axisSet.xAxis.labelOffset = 3.0f; 
axisSet.xAxis.majorIntervalLength = CPTDecimalFromFloat(2.0f); 
axisSet.xAxis.minorTicksPerInterval = 1; 
axisSet.xAxis.minorTickLength = 5.0f; 
axisSet.xAxis.majorTickLength = 7.0f; 

axisSet.yAxis.title = @"Data Y"; 
axisSet.yAxis.titleTextStyle = textStyle; 
axisSet.yAxis.titleOffset = 40.0f; 
axisSet.yAxis.axisLineStyle = lineStyle; 
axisSet.yAxis.majorTickLineStyle = lineStyle; 
axisSet.yAxis.minorTickLineStyle = lineStyle; 
axisSet.yAxis.labelTextStyle = textStyle; 
axisSet.yAxis.labelOffset = 3.0f; 
axisSet.yAxis.majorIntervalLength = CPTDecimalFromFloat(20.0f); 
axisSet.yAxis.minorTicksPerInterval = 1; 
axisSet.yAxis.minorTickLength = 5.0f; 
axisSet.yAxis.majorTickLength = 7.0f; 

// Add a plot to our graph and axis. We give it an identifier so that we 
// could add multiple plots (data lines) to the same graph if necessary. 
CPTScatterPlot *plot = [[CPTScatterPlot alloc] init]; 



plot.dataSource = self; 
plot.identifier = @"mainplot"; 

plot.dataLineStyle = lineStyle; 
plot.plotSymbol = plotSymbol; 
[_graph reloadData]; 
[self.graph addPlot:plot]; 
} 

私は思いついた変更は何ですか?何か案が? はあなた

答えて

1

ありがとうございました。このライン

CGRect frame = [self.hostingView bounds]; 

は、我々はすべてのhostingViewに私たちのプロットを描画することを意味します。

  1. どう利用について

    -(void)initialisePlot:(UIInteger)indexOfPlot代わりの

    -(void)initialisePlot

  2. 利用hostingViewのほんの一部(チェンジ・フレームに応じindexOfPlot):

    CGRect frame = [self.hostingView bounds]; //change this to:

    だけスキーム:

    CGRect frame;

    if (indexOfPlot == 0) {frame = ...(set upper part here)} else {frame = ...(lower)}

  3. 次にソースでinitialisePlotを見つけ、2つのinitialezePlot:0initializePlot:1方法に変更。

かなり単純です。

+0

こんにちはカスパルスです。私は一種の迷子だ。 - (void)initialisePlot:(UIInteger)indexOfPlotここで私はこれを宣言していますか? CGRectフレーム= [self.hostingView bounds]。これを変える? –

+1

ここで、おそらく.hファイルにあります。そして、はい、 'CGRect frame = [self.hostingView bounds];を変更します。これに応じてframeをindexOfPlotで設定する必要があります。たとえば、最初のプロットでは上の部分、2番目のプロットでは下の部分です。 – kaspartus

+0

こんにちはKaspartus、Urの提案はうまくいきますが、2つの異なるデータセットで同時に両方のプロットを使用する必要がある場合はどうすればよいですか? –