Ios 在单视图页面上为核心绘图中的两个不同绘图创建两个X轴

Ios 在单视图页面上为核心绘图中的两个不同绘图创建两个X轴,ios,graph,core-plot,Ios,Graph,Core Plot,我试图在同一页上绘制两组数据wrt到时间,因此我需要两个不同的X轴和Y轴。下面是我正在使用的示例代码: -(void)initialisePlot { // Start with some simple sanity checks before we kick off if ( (self.hostingView == nil) || (self.graphData == nil) ) { NSLog(@"TUTSimpleScatterPlot: Cannot initialise

我试图在同一页上绘制两组数据wrt到时间,因此我需要两个不同的X轴和Y轴。下面是我正在使用的示例代码:

 -(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];
}
我应该做出什么样的改变?有什么想法吗? 谢谢你这句话

CGRect frame = [self.hostingView bounds];
意味着我们将在所有hostingView上绘制我们的图

  • 使用呢

    -(void)initialisePlot:(UIInteger)indexOfPlot

    而不是:

    -(无效)初始值绘图

  • 仅使用hostingView的一部分(相应地更改帧indexOfPlot):

    CGRect frame=[self.hostingView-bounds]//将此更改为:

    正义计划:

    CGRect帧

    if(indexOfPlot==0){frame=…(在这里设置上部)}else{frame=…(下部)}

  • 然后在源代码中找到
    initialisePlot
    ,并更改为两个
    initializePlot:0
    initializePlot:1
    方法


  • 看起来很简单。

    你好,卡斯帕特斯。我有点迷路了-(void)initialisePlot:(UIInteger)indexOfPlot我应该在哪里声明这个?和CGRect frame=[self.hostingView界限];更改这个?在这里,可能在.h文件中。是的,更改
    CGRect frame=[self.hostingView-bounds]必须使用indexOfPlot相应地设置帧。例如,第一个绘图的上半部分和第二个绘图的下半部分。您好,Kaspartus,您的建议很好,但是如果我需要同时使用两个绘图和两组不同的数据,该怎么办?嗯,看起来,您只发布初始化绘图(只是轴而没有绘图)。您必须在所有函数中使用相同的技巧(使用indexOfPlot相应地绘制绘图)。另一种方法:将函数更改为具有绘图框参数的函数(例如:-(void)initialisePlot:(NSFrame*)plotFrame,而不是-(void)initialisePlot)。这真的很简单。但是您必须更改与frame链接的所有绘图函数。因此,我可以在initialiseplot()中分别调用frame1和Frame2,从而让最终用户可以看到这两个图形吗?