关于Core-Plot的配置。大家能够參考我的上一篇博客:http://1.wildcat.sinaapp.com/?p=99

版权全部。转载请注明原文转自:http://blog.csdn.net/wildcatlele/article/details/25483923

大家能够到:http://1.wildcat.sinaapp.com/?p=102观看本篇博客更友好的排版格式

或者你英语好也能够參考github上的wiki介绍:https://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications

先看一下效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsZGNhdGxlbGU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

好了以下说说详细使用吧:

1.改动ViewController.h文件例如以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
//
//  ViewController.h
//  CorePlotDemo
//
//  Created by wildcat on 14-5-9.
//  Copyright (c) 2014年 com.wildcat. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "CorePlot-CocoaTouch.h"
 
@interface ViewController : UIViewController<CPTPlotDataSource>
@property (nonatomic, strong) CPTGraphHostingView *hostView;
@end

2.在.m文件里的implement以下加入

1
@synthesizehostView=hostView_;

3.在以下接着加入几个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#pragma mark - UIViewController lifecycle methods
-(void)viewDidAppear:(BOOL)animated
{
    [super
viewDidAppear:animated];
    [self
initPlot];
}
 
#pragma mark - Chart behavior
-(void)initPlot
{
    [self
configureHost];
    [self
configureGraph];
    [self
configurePlots];
    [self
configureAxes];    
}
 
-(void)configureHost
{  
}
 
-(void)configureGraph
{
}
 
-(void)configurePlots
{
}
 
-(void)configureAxes
{
}

4.在@end上边加入

  1. #pragma mark - CPTPlotDataSource methods
  2. -(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot{
  3. return0;
  4. }
  5. -(NSNumber *)numberForPlot:(CPTPlot *)plotfield:(NSUInteger)fieldEnumrecordIndex:(NSUInteger)index{
  6. return[NSDecimalNumberzero];
  7. }

5.加入以下代码到-(void)configureHost函数:

  1. self.hostView=[(CPTGraphHostingView *)[CPTGraphHostingViewalloc]initWithFrame:CGRectMake(0,10,self.view.bounds.size.width-10,self.view.bounds.size.height/2)];
  2. self.hostView.allowPinchScaling=YES;
  3. [self.viewaddSubview:self.hostView];

以上代码的主要作用就是声明一个视图用于画图。以下的折线图将绘制到这个视图上,然后加入为self.view的子视图。

6.加入以下代码到configureGraph:

  1. //create an CPXYGraph and host it inside the view
  2. CPTTheme *theme=[CPTThemethemeNamed:kCPTPlainWhiteTheme];
  3. CPTXYGraph *graph=(CPTXYGraph *)[themenewGraph];
  4. graph.paddingLeft=10.0;
  5. graph.paddingTop=10.0;
  6. graph.paddingRight=10.0;
  7. graph.paddingBottom=10.0;
  8. self.hostView.hostedGraph=graph;
  9. CPTXYPlotSpace *plotSpace2=(CPTXYPlotSpace *)graph.defaultPlotSpace;
  10. //一屏内可显示的x,y方向的量度范围
  11. plotSpace2.xRange=[CPTPlotRangeplotRangeWithLocation:CPTDecimalFromCGFloat(-0.6)
  12. length:CPTDecimalFromCGFloat(6.0)];
  13. plotSpace2.yRange=[CPTPlotRangeplotRangeWithLocation:CPTDecimalFromCGFloat(-1.0)
  14. length:CPTDecimalFromCGFloat(10.0)];
  15. plotSpace2.allowsUserInteraction=YES;

7.加入以下代码到configurePlots:

  1. // 1 - Get graph and plot space
  2. CPTGraph *graph = self.hostView.hostedGraph;
  3. CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
  4. //2:创建线性
  5. CPTMutableLineStyle *lineStyle=[CPTMutableLineStyle lineStyle];
  6. lineStyle.miterLimit = 1.0f;
  7. lineStyle.lineWidth = 3.0f;
  8. lineStyle.lineColor = [CPTColor blueColor];
  9. //3.设置数据点
  10. CPTScatterPlot * lowScatterPlot = [[CPTScatterPlot alloc] init];
  11. lowScatterPlot.dataLineStyle = lineStyle;
  12. lowScatterPlot.identifier = @"LOWER";
  13. lowScatterPlot.dataSource = self; //设置数据源
  14. [graph addPlot:lowScatterPlot toPlotSpace:plotSpace];
  15. //....
  16. CPTScatterPlot * highScatterPlot = [[CPTScatterPlot alloc] init];
  17. highScatterPlot.dataLineStyle = lineStyle;
  18. highScatterPlot.identifier = @"HIGH";
  19. highScatterPlot.dataSource = self;
  20. [graph addPlot:highScatterPlot toPlotSpace:plotSpace];
  21. //4.设置显示区域,滑动到数据点处
  22. [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:lowScatterPlot,highScatterPlot, nil]];
  23. CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy];
  24. [xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.1f)];
  25. plotSpace.xRange = xRange;
  26. CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy];
  27. [yRange expandRangeByFactor:CPTDecimalFromCGFloat(1.2f)];
  28. plotSpace.yRange = yRange;
  29. //5.设置折线
  30. CPTMutableLineStyle *lowLineStyle = [lowScatterPlot.dataLineStyle mutableCopy];
  31. lowLineStyle.lineWidth = 2.0f; //折线宽度
  32. lowLineStyle.lineColor = [CPTColor blueColor]; //折线颜色
  33. lowScatterPlot.dataLineStyle = lowLineStyle; //设置数据线样式
  34. CPTMutableLineStyle *lowSymbolLineStyle = [CPTMutableLineStyle lineStyle];
  35. lowSymbolLineStyle.lineColor = [CPTColor blueColor];
  36. //...
  37. CPTMutableLineStyle *highLineStyle = [lowScatterPlot.dataLineStyle mutableCopy];
  38. highLineStyle.lineWidth = 2.0f; //折线宽度
  39. highLineStyle.lineColor = [CPTColor redColor]; //折线颜色
  40. highScatterPlot.dataLineStyle = highLineStyle; //设置数据线样式
  41. CPTMutableLineStyle *highSymbolLineStyle = [CPTMutableLineStyle lineStyle];
  42. highSymbolLineStyle.lineColor = [CPTColor redColor];
  43. //6.设置拐点
  44. CPTPlotSymbol *lowSymbol = [CPTPlotSymbol ellipsePlotSymbol];
  45. lowSymbol.fill = [CPTFill fillWithColor:[CPTColor blueColor]];
  46. lowSymbol.lineStyle = lowSymbolLineStyle;
  47. lowSymbol.size = CGSizeMake(6.0f, 6.0f); //拐点大小
  48. lowScatterPlot.plotSymbol = lowSymbol;
  49. CPTPlotSymbol *highSymbol = [CPTPlotSymbol ellipsePlotSymbol];
  50. highSymbol.fill = [CPTFill fillWithColor:[CPTColor redColor]];
  51. highSymbol.lineStyle = highSymbolLineStyle;
  52. highSymbol.size = CGSizeMake(6.0f, 6.0f); //拐点大小
  53. highScatterPlot.plotSymbol = highSymbol;

以上代码主要是设置折线、拐点的类型以及设置高低温两个折线图.最重要的是加入数据源 .dataSource    = self;

8.设置x、y轴的间隔及细分刻度等。加入以下代码到configureAxes函数:

  1. CPTGraph *graph=self.hostView.hostedGraph;
  2. //1:创建线性
  3. CPTMutableLineStyle *lineStyle=[CPTMutableLineStylelineStyle];
  4. //axes 设置x,y轴属性。如原点。
  5. //得到x,y轴的集合
  6. CPTXYAxisSet *axisSet=(CPTXYAxisSet *)graph.axisSet;
  7. lineStyle.miterLimit=1.0f;
  8. lineStyle.lineWidth=0.5f;
  9. lineStyle.lineColor=[CPTColorblueColor];
  10. //设置x轴线
  11. CPTXYAxis *x=axisSet.xAxis;
  12. x.orthogonalCoordinateDecimal=CPTDecimalFromString(@"0");//原点为0.(y=0)
  13. x.majorIntervalLength=CPTDecimalFromString(@"1");// x轴主刻度:显示数字标签的量度间隔
  14. x.minorTicksPerInterval=0;// x轴细分刻度:每个主刻度范围内显示细分刻度的个数
  15. x.minorTickLineStyle=lineStyle;
  16. //设置y 轴
  17. CPTXYAxis *y=axisSet.yAxis;
  18. y.orthogonalCoordinateDecimal=CPTDecimalFromString(@"0");
  19. y.majorIntervalLength=CPTDecimalFromString(@"1");
  20. y.minorTicksPerInterval=0;
  21. y.minorTickLineStyle=lineStyle;

9.设置数据源方法,改动两个方法例如以下:

  1. #pragma mark - CPTPlotDataSource methods
  2. -(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
  3. return 4; //数据点个数
  4. }
  5. static int a=1;
  6. -(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
  7. switch (fieldEnum) {
  8. case CPTScatterPlotFieldX:
  9. if (a>4) {
  10. a=1;
  11. }
  12. return [NSNumber numberWithInt:a++];
  13. break;
  14. case CPTScatterPlotFieldY:
  15. if ([plot.identifier isEqual:@"LOWER"] == YES) {
  16. return [NSNumber numberWithInt:arc4random()%8];
  17. }else if([plot.identifier isEqual:@"HIGH"] == YES){
  18. return [NSNumber numberWithInt:arc4random()%8+10];
  19. }
  20. break;
  21. }
  22. return [NSDecimalNumber zero];
  23. }

好了一切设置完成执行看看效果。

补充:

Core Plot 框架结构分析

CorePlot 的类结构关系例如以下:

当中最核心的就是 CPTGraph,本演示样例中的 CPTXYGraph是它的子类;一个图 CPTGraph包括一个轴集 CPTAxiset。每个轴集可包括多个轴;一个图 CPTGraph 可包括多个图空间 CPTPlotSpace;一个图 CPTGraph 可包括多个图形CPTSplot(曲线,饼图,柱状图等);图形CPTSplot 和轴都展如今某个图空间 CPTPlotSpace 中。

其余的部分,尚未介绍到。暂且不提。

或许下图能更形象地描写叙述出 Core Plot 各种对象之间的关系。

IOS使用Core-Plot画折线图的更多相关文章

  1. python中matplotlib画折线图实例(坐标轴数字、字符串混搭及标题中文显示)

    最近在用python中的matplotlib画折线图,遇到了坐标轴 "数字+刻度" 混合显示.标题中文显示.批量处理等诸多问题.通过学习解决了,来记录下.如有错误或不足之处,望请指 ...

  2. SAS 画折线图PROC GPLOT

    虽然最后做成PPT里的图表会被要求用EXCEL画,但当我们只是在分析的过程中,想看看数据的走势,直接在SAS里画会比EXCEL画便捷的多. 修改起来也会更加的简单,,不用不断的修改程序然后刷新EXCE ...

  3. Matplotlib学习---用matplotlib画折线图(line chart)

    这里利用Jake Vanderplas所著的<Python数据科学手册>一书中的数据,学习画图. 数据地址:https://raw.githubusercontent.com/jakevd ...

  4. echars画折线图的一种数据处理方式

    echars画折线图的一种数据处理方式 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  5. 使用OpenCV画折线图

    使用OpenCV画直方图是一件轻松的事情,画折线图就没有那么Easy了,还是使用一个库吧: GraphUtils 源代码添加入工程 原文链接:http://www.360doc.com/content ...

  6. iOS绘制坐标图,折线图-Swift

    坐标图,经常会在各种各样的App中使用,最常用的一种坐标图就是折线图,根据给定的点绘制出对应的坐标图是最基本的需求.由于本人的项目需要使用折线图,第一反应就是搜索已经存在的解决方案,因为这种需求应该很 ...

  7. gnuplot画折线图

    之前尝试用jfreechart画自定义横坐标的折线图或时序图,发现很复杂,后来改用gnuplot了. gnuplot在网上一搜就能找到下载地址. 安装完成后,主要是命令行形式的交互界面,至少比jfre ...

  8. iOS 使用 Core Plot 绘制统计图表入门

     本文转载至 http://blog.csdn.net/zhibudefeng/article/details/7677457   iOS(iPhone/iPad) 下图形组件有两个有名的,s7gra ...

  9. python用matplotlib画折线图

    折线图: import matplotlib.pyplot as plt y1=[10,13,5,40,30,60,70,12,55,25] x1=range(0,10) x2=range(0,10) ...

随机推荐

  1. 解决RaycastTarget勾选过多的烦恼

    看过UGUI源码的朋友一定都知道,UI事件会在EventSystem在Update的Process触发.UGUI会遍历屏幕中所有RaycastTarget是true的UI,接着就会发射线,并且排序找到 ...

  2. 怎么用MathType编辑带圈字母

    在用word公式编辑器MathType编辑公式时,里面涉及到很多的数学物理符号等等,这些符号或者是公式其实都可以利用MathType中的模板进行组合.在这些数学公式中,有时会有一些比较特殊的符号,它们 ...

  3. javascript与 ios通讯解决办法

    阔别1年半之久,一个JavaScript和ios通讯的想法终于被实现了(我不知道别人有没有早就实现过~). 记得早期ios内嵌html做通讯时,貌似做好的办法只能是 ios通过url来截取页面发送消息 ...

  4. [Scikit-learn] Dynamic Bayesian Network - Kalman Filter

    看上去不错的网站:http://iacs-courses.seas.harvard.edu/courses/am207/blog/lecture-18.html SciPy Cookbook:http ...

  5. Java精选笔记_集合【Map(映射)接口】

    Map(映射)接口 简介 该集合存储键值对,一对一对的往里存,并且键是唯一的.要保证map集合中键的唯一性. 从Map集合中访问元素时,只要指定了Key,就能找到对应的Value. 关键字是以后用于检 ...

  6. swift学习笔记之--类的计算属性

    1,Swift中类可以使用计算属性,即使用get和set来间接获取/改变其他属性的值,代码如下 class Calcuator{ ; ; var sum:Int{ get{ return a + b ...

  7. centos无法联网解决方法

    1)进入 /etc/sysconfig/network-scripts/ 2)vi 或 vim 打开 ifcfg-eth0(不一定是eth0,这个自己判断了) 3)将 ONBOOT=no 改成 ONB ...

  8. Qt选择文件对话框-中文路径-转std::string

    #include <QFileDialog>#pragma execution_character_set("utf-8") QString path = QFileD ...

  9. 将display设置为inline-block之后产生间隙然后换行问题的解决方法

    在我们会用display的时候,inline-block肯定不陌生吧,我今天在做项目的时候,用了inline-block,使a标签可以自定义宽度,但是随之而来的问题就是换行的BUG,如下图 特地加了一 ...

  10. php学习十:继承

    在php中,我们常常会定义许多类,当多个类里面的方法或者属性出现重复的时候,会常常造成代码重复和冗杂的弊端,这个时候,我们可以用到继承(extends) 继承的特性: * 1.子类可以扩充属性* 2. ...