利用Core Plot绘制折线图
来源:互联网 发布:ubuntu查看显卡状态 编辑:程序博客网 时间:2024/06/04 19:03
这次是最后一篇,这里要说到的是折线图
这里的折线图有两种,一种是断点式的,一种是连续式的,通过设置dashpattern这个数组来进行区分
还有就是设置颜色渐变,通过CPTGradient,话不多说,直接上代码
-(void)createView{ //创建图表 CPTXYGraph *newGraph = [[CPTXYGraph alloc] initWithFrame:CGRectZero]; //主题 CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme]; [newGraph applyTheme:theme]; //画布 CPTGraphHostingView *scatterPlotView = [[CPTGraphHostingView alloc] initWithFrame:self.view.frame]; scatterPlotView.hostedGraph = newGraph; [self.view addSubview:scatterPlotView]; //设置图表距离边框的大小 newGraph.paddingLeft = 10.0; newGraph.paddingTop = 10.0; newGraph.paddingRight = 10.0; newGraph.paddingBottom = 10.0; //设置xy轴的范围 CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace; plotSpace.allowsUserInteraction = YES; plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 length:@2.0]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 length:@3.0]; //设置x轴的信息 CPTXYAxisSet *axisSet = (CPTXYAxisSet *)newGraph.axisSet; CPTXYAxis *x = axisSet.xAxis; //主刻度间隔为0.5 x.majorIntervalLength = @0.5; //设置x轴原点 x.orthogonalPosition = @2.0; x.minorTicksPerInterval = 2; //设置x轴上不需要显示的刻度 CPTPlotRangeArray exclusionRanges = @[[CPTPlotRange plotRangeWithLocation:@1.99 length:@0.02], [CPTPlotRange plotRangeWithLocation:@0.99 length:@0.02], [CPTPlotRange plotRangeWithLocation:@2.99 length:@0.02]]; x.labelExclusionRanges = exclusionRanges; CPTXYAxis *y = axisSet.yAxis; y.majorIntervalLength = @0.5; y.minorTicksPerInterval = 5; y.orthogonalPosition = @2.0; exclusionRanges = @[[CPTPlotRange plotRangeWithLocation:@1.99 length:@0.02], [CPTPlotRange plotRangeWithLocation:@0.99 length:@0.02], [CPTPlotRange plotRangeWithLocation:@3.99 length:@0.02]]; y.labelExclusionRanges = exclusionRanges; // Create a green plot area // 绿色显示线条 CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init]; dataSourceLinePlot.identifier = @"Green Plot"; CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy]; lineStyle.lineWidth = 3.0; lineStyle.lineColor = [CPTColor greenColor]; //设置虚线, 代表着样式,这里的值是一个数组 lineStyle.dashPattern = @[@35.0f, @5.0f]; dataSourceLinePlot.dataLineStyle = lineStyle; dataSourceLinePlot.dataSource = self; // Put an area gradient under the plot above //绿色渐变区域 CPTColor *areaColor = [CPTColor colorWithComponentRed:CPTFloat(0.3) green:CPTFloat(1.0) blue:CPTFloat(0.3) alpha:CPTFloat(0.8)]; CPTGradient *areaGradient = [CPTGradient gradientWithBeginningColor:areaColor endingColor:[CPTColor clearColor]]; areaGradient.angle = -90.0; CPTFill *areaGradientFill = [CPTFill fillWithGradient:areaGradient]; dataSourceLinePlot.areaFill = areaGradientFill; dataSourceLinePlot.areaBaseValue = @1.75; // Animate in the new plot, as an example dataSourceLinePlot.opacity = 0.0; dataSourceLinePlot.cachePrecision = CPTPlotCachePrecisionDecimal; [newGraph addPlot:dataSourceLinePlot]; //显示淡入签出动画动画 CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; fadeInAnimation.duration = 1.0; fadeInAnimation.removedOnCompletion = NO; fadeInAnimation.fillMode = kCAFillModeForwards; fadeInAnimation.toValue = @1.0; [dataSourceLinePlot addAnimation:fadeInAnimation forKey:@"animateOpacity"]; // Create a blue plot area //蓝色线条 CPTScatterPlot *boundLinePlot = [[CPTScatterPlot alloc] init]; boundLinePlot.identifier = @"Blue Plot"; lineStyle = [boundLinePlot.dataLineStyle mutableCopy]; lineStyle.miterLimit = 1.0; lineStyle.lineWidth = 3.0; lineStyle.lineColor = [CPTColor blueColor]; boundLinePlot.dataSource = self; boundLinePlot.cachePrecision = CPTPlotCachePrecisionDouble; boundLinePlot.interpolation = CPTScatterPlotInterpolationHistogram; [newGraph addPlot:boundLinePlot]; // Do a blue gradient //蓝色渐变区域 CPTColor *areaColor1 = [CPTColor colorWithComponentRed:CPTFloat(0.3) green:CPTFloat(0.3) blue:CPTFloat(1.0) alpha:CPTFloat(0.8)]; CPTGradient *areaGradient1 = [CPTGradient gradientWithBeginningColor:areaColor1 endingColor:[CPTColor clearColor]]; areaGradient1.angle = -90.0; areaGradientFill = [CPTFill fillWithGradient:areaGradient1]; boundLinePlot.areaFill = areaGradientFill; boundLinePlot.areaBaseValue = @0.0; // Add plot symbols //设置线条的样式 CPTMutableLineStyle *symbolLineStyle = [CPTMutableLineStyle lineStyle]; symbolLineStyle.lineColor = [CPTColor redColor]; //设置关键点的样式,是圆圈还是什么乱七八糟的东东 CPTPlotSymbol *plotSymbol = [CPTPlotSymbol ellipsePlotSymbol]; //设置原点内部的颜色 plotSymbol.fill = [CPTFill fillWithColor:[CPTColor whiteColor]]; plotSymbol.lineStyle = symbolLineStyle; plotSymbol.size = CGSizeMake(10.0, 10.0); boundLinePlot.plotSymbol = plotSymbol; // Add some initial data //设置数据 NSMutableArray<NSDictionary *> *contentArray = [NSMutableArray arrayWithCapacity:100]; for ( NSUInteger i = 0; i < 60; i++ ) { NSNumber *xVal = @(1 + i * 0.05); NSNumber *yVal = @(1.2 * arc4random() / (double)UINT32_MAX + 1.2); [contentArray addObject:@{ @"x": xVal, @"y": yVal }]; } self.dataForPlot = contentArray;}设置数据源方法
#pragma mark DataSource-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot{ return self.dataForPlot.count;}-(id)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index{ NSNumber *num = nil; if ( index % 8 ) { NSString *key = (fieldEnum == CPTScatterPlotFieldX ? @"x" : @"y"); num = self.dataForPlot[index][key]; // Green plot gets shifted above the blue if ( [(NSString *)plot.identifier isEqualToString : @"Green Plot"] ) { if ( fieldEnum == CPTScatterPlotFieldY ) { num = @([num doubleValue] + 1.0); } } } else { num = @(NAN); } return num;}-(CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)idx{ static CPTMutableTextStyle *whiteText = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ whiteText = [[CPTMutableTextStyle alloc] init]; whiteText.color = [CPTColor whiteColor]; }); CPTTextLayer *newLayer = nil; newLayer = [[CPTTextLayer alloc] initWithText:[NSString stringWithFormat:@"%lu",(unsigned long)idx] style:whiteText]; return newLayer;}
最后上效果图
0 0
- 利用Core Plot绘制折线图
- 如何使用Core Plot绘制直方图和折线图
- 如何使用Core Plot绘制直方图和折线图
- 如何使用Core Plot绘制直方图和折线图
- 利用Core Plot绘制饼状图
- 利用Core Plot绘制柱状图
- IOS使用Core-Plot画折线图
- 使用Dataframe.plot绘制折线图
- matplotlib plot( ) 绘制简单折线图
- Core Plot学习笔记:绘制饼图
- 在python中,用plot绘制折线图
- Core Plot学习笔记(二):绘制饼图
- Core Plot学习笔记(二):绘制饼图
- 利用google绘图API 绘制折线图
- .NET : 如何利用GDI+绘制折线图
- android中利用Canvas绘制折线图
- 利用 html5 canvas 简单绘制折线图
- 利用canvas实现折线图的绘制
- 转载:看c++ primer 学习心得
- C++不初始化
- iOS7 修改状态条文字的颜色为白色的 正确方法
- linux 获取本机外网ip
- 自定义 UIButton(图片+文字)
- 利用Core Plot绘制折线图
- php中isset 、empty 区别
- 开源工程热部署
- spring4.2 MVC注解备忘
- Codeforces Round #330 (Div. 1) B. Max and Bike
- beautifulsoup抓取 class 关键字
- Android. ImageView with SVG Support
- asp.net堆和栈的对比 #1
- error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCom