Ios 在单视图页面上为核心绘图中的两个不同绘图创建两个X轴
我试图在同一页上绘制两组数据wrt到时间,因此我需要两个不同的X轴和Y轴。下面是我正在使用的示例代码: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
-(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
而不是:
-(无效)初始值绘图
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,从而让最终用户可以看到这两个图形吗?