我在我的应用程序中实现了核心绘图库,我想从图形中删除负数部分,但我在Google上进行了大量搜索,但找不到任何答案。当我向下滚动图表时,将显示图表上的负值,并且向左滚动也会显示。
这是我的代码
-(void)drawGraph{
graph = [[CPTXYGraph alloc] initWithFrame:self.view.bounds];
CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme];
[graph applyTheme:theme];
hostingView1 = [[CPTGraphHostingView alloc] initWithFrame:self.view.bounds];
hostingView1.hostedGraph = graph;
if ([[UIScreen mainScreen] bounds].size.height == 568){
hostingView1.frame = CGRectMake(15, 5, 290, 220);
}
else{
hostingView1.frame = CGRectMake(15, 3, 290, 135);
}
[myGraphView addSubview:hostingView1];
[myGraphView addSubview:lbl1];
[myGraphView addSubview:lbl2];
[lbl1 setTransform:CGAffineTransformMakeRotation(-M_PI / 2)];
[hostingView1 release];
graph.paddingLeft = 0;
graph.paddingTop = 0;
graph.paddingRight = 0;
graph.paddingBottom = 0;
graph.plotAreaFrame.paddingLeft = 35.0 ;
graph.plotAreaFrame.paddingTop = 20.0 ;
graph.plotAreaFrame.paddingRight = 5.0 ;
graph.plotAreaFrame.paddingBottom = 30 ;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.allowsUserInteraction = YES;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0) length:CPTDecimalFromFloat(50.0)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0) length:CPTDecimalFromFloat(10.0)];
CPTXYAxisSet *axisSet = (CPTXYAxisSet *) graph.axisSet ;
CPTXYAxis *x = axisSet.xAxis ;
x. minorTickLineStyle = nil ;
x. majorIntervalLength = CPTDecimalFromString (@"10");
x. orthogonalCoordinateDecimal = CPTDecimalFromString ( @"0" );
CPTXYAxis *y = axisSet.yAxis ;
y. minorTickLineStyle = nil ;
y. majorIntervalLength = CPTDecimalFromString ( @"2" );
y. orthogonalCoordinateDecimal = CPTDecimalFromString (@"0");
dataSourceLinePlot = [[[CPTScatterPlot alloc] init] autorelease];
dataSourceLinePlot.identifier = @"Green Plot";
CPTMutableLineStyle *lineStyle = [[dataSourceLinePlot.dataLineStyle mutableCopy] autorelease];
lineStyle.lineWidth = 0.3f;
lineStyle.lineColor = [CPTColor orangeColor];
dataSourceLinePlot.dataLineStyle = lineStyle;
dataSourceLinePlot.opacity = 0.0f;
dataSourceLinePlot.dataSource = self;
[graph addPlot:dataSourceLinePlot];
CPTGradient *areaGradient = [ CPTGradient gradientWithBeginningColor :[CPTColor orangeColor] endingColor :[CPTColor colorWithComponentRed:0.55 green:0.55 blue:0.16 alpha:0.0]];
areaGradient.angle = -00.0f ;
CPTFill *areaGradientFill = [ CPTFill fillWithGradient :areaGradient];
dataSourceLinePlot. areaFill = areaGradientFill;
dataSourceLinePlot. areaBaseValue = CPTDecimalFromString ( @"0.0" );
dataSourceLinePlot.interpolation = CPTScatterPlotInterpolationLinear ;
}
最佳答案
让视图/对象处理图采用CPTPlotSpaceDelegate协议:
@interface YourViewController () <CPTPlotSpaceDelegate>
然后将控制器分配给绘图空间的委托:
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.allowsUserInteraction = YES;
[plotSpace setDelegate:self];
最后,让控制器实现CPTPlotSpaceDelegate函数“ willChangePlotRangeTo”
-(CPTPlotRange*)plotSpace:(CPTPlotSpace *)space willChangePlotRangeTo:(CPTPlotRange *)newRange forCoordinate:(CPTCoordinate)coordinate
{
if([newRange locationDouble] < 0)
{
if(coordinate == CPTCoordinateX)
return [(CPTXYPlotSpace*)space xRange];
else if(coordinate == CPTCoordinateY)
return [(CPTXYPlotSpace*)space yRange];
}
return newRange;
}
这样可以通过返回当前绘图范围来防止绘图空间进一步滚动。如果您决定要更改任一轴的下边界,则可以声明任意下边界。