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

本文转载至

http://blog.csdn.net/zhibudefeng/article/details/7677457

iOS(iPhone/iPad) 下图形组件有两个有名的,s7graphview 和 Core Plot,它们都是在 Google 上托管的代码,听说 Core Plot 比较强,因为前者仅支持曲线图,后者呢曲线图、饼图、柱状图等通吃,且较活跃。那就专注下 Core Plot 的使用。它提供了 Mac OS X 和 iOS 下的组件库,我只用到它的 iOS 图表库。

Core Plot 能画出来图表的效果应该多看看:http://code.google.com/p/core-plot/wiki/PlotExamples,相信看过之后绝大多数的 iOS 下的图表可以用它来满足你了。

配置其实很简单的,先从 http://code.google.com/p/core-plot/downloads/list 下载最新版的 Core Plot,比如当前是:CorePlot_0.4.zip,解压开,然后就两步:

1. 把目录 CorePlot_0.4/Binaries/iOS 中的 libCorePlotCocoaTouch.a 和整个子目录 CorePlotHeaders 从 Finder 中一并拖入到当前项目中,选择 Copy item into destination group‘s folder (if needed),Add to targets 里选上相应的 target。此时你可以在项目的 target 中 Build Phases 页里 Link Binary With Libraries 中看到有了 libCorePlot-CocoaTouch.a.

2. 再到相应 Target 的 Build Settings 页里,Other Linker Flags 项中加上 -ObjC -all_load

[注]我所用的 Xcode 是 4.1 版本的。Xcode 3 的 Target 设置项位置稍有不同。

配置就这么完成了,使用时只需要 #import "CorePlot-CocoaTouch.h",下面来体验一个最简单的例子,下载的 CorePlot 包中虽然有一些例子,但还是需要一个能让人好理解并获得最快速体验的。比如像这下图中这么一个最简单的曲线图,最基本的代码要素应该有哪些呢?

主要代码就是下面那样:


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

//

//  Created by Unmi Qiu on 8/11/11.

//  Copyright 2011 . All rights reserved.

//

#import <UIKit/UIKit.h>

#import "CorePlot-CocoaTouch.h"

@interface TestCorePlotViewController : UIViewController<CPTPlotDataSource> {

    NSMutableArray *dataArray;

}

@end

@implementation TestCorePlotViewController

#pragma mark - View lifecycle

- (void) viewDidAppear:(BOOL)animated {

    

    //初始化数组,并放入十个 0 - 20 间的随机数

    dataArray = [[NSMutableArray alloc] init];

    for(int i=0; i< 10; i++){

        [dataArray addObject:[NSNumber numberWithInt:rand()%20]];

    }

    CGRect frame = CGRectMake(10,10, 300,100);

    

    //图形要放在一个 CPTGraphHostingView 中,CPTGraphHostingView 继承自 UIView

    CPTGraphHostingView *hostView = [[CPTGraphHostingView alloc] initWithFrame:frame];

    

    //把 CPTGraphHostingView 加到你自己的 View 中

    [self.view addSubview:hostView];

    hostView.backgroundColor = [UIColor blueColor];

    

    //在 CPTGraph 中画图,这里的 CPTXYGraph 是个曲线图

    //要指定 CPTGraphHostingView 的 hostedGraph 属性来关联

    CPTXYGraph *graph = [[CPTXYGraph alloc] initWithFrame:hostView.frame];

    hostView.hostedGraph = graph;

    

    CPTScatterPlot *scatterPlot = [[CPTScatterPlot alloc] initWithFrame:graph.bounds];

    [graph addPlot:scatterPlot];

    scatterPlot.dataSource = self; //设定数据源,需应用 CPTPlotDataSource 协议

    

    //设置 PlotSpace,这里的 xRange 和 yRange 要理解好,它决定了点是否落在图形的可见区域

    //location 值表示坐标起始值,一般可以设置元素中的最小值

    //length 值表示从起始值上浮多少,一般可以用最大值减去最小值的结果

    //其实我倒觉得,CPTPlotRange:(NSRange) range 好理解些,可以表示值从 0 到 20

    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) scatterPlot.plotSpace;

    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0)

                                                    length:CPTDecimalFromFloat([dataArray count]-1)];

    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0)

                                                    length:CPTDecimalFromFloat(20)];

    

    //下面省去了坐标与线型及其他图形风格的代码

    

    [plotSpace release];

    [graph release];

    [hostView release];

}

//询问有多少个数据,在 CPTPlotDataSource 中声明的

- (NSUInteger) numberOfRecordsForPlot:(CPTPlot *)plot {

    return [dataArray count];

}

//询问一个个数据值,在 CPTPlotDataSource 中声明的

- (NSNumber *) numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {

    if(fieldEnum == CPTScatterPlotFieldY){    //询问 Y 值时

        return [dataArray objectAtIndex:index];

    }else{                                    //询问 X 值时

        return [NSNumber numberWithInt:index];

    }

}

- (void) dealloc {

    [dataArray release];

    [super dealloc];

}

@end

关于更详细的 Core Plot 使用,下面还会继续作介绍的。

参考:1. http://www.e-string.com/content/simple-graph-using-core-plot
            2. http://www.e-string.com/content/simple-bar-chart-core-plot
            3. http://www.jaysonjc.com/programming/pie-chart-drawing-in-iphone-using-core-plot-library.html

Test application

Mac   效果图

iPhone

 

iPad

 

DropPlot (Mac)

 

AAPLot (iPhone)

Function plotting

This is drawn from the following tutorial: "Using Core Plot in an iPhone Application" (Switch On The Code)

iOS 使用 Core Plot 绘制统计图表入门,布布扣,bubuko.com

时间: 2024-10-13 11:37:19

iOS 使用 Core Plot 绘制统计图表入门的相关文章

IOS的Core Image使用

Core Image Programming Guide--图像编程指南 一.介绍Core Image是一个处理和分析图像的技术,被设计用来提供接近实时处理静态和视频图像.Core Image隐藏了低级的graphics 处理过程,提供了一个易于使用的程序界面(API).你不需要知道OpenGL ES的细节,也不需要知道GCD.它替你处理这些. 1.Core Image 框架提供:1)访问内置的图像处理filter2)检测特征能力3)支持自动图像增强4)连接多个filter来创建自己想要的效果.

iOS 使用贝塞尔曲线绘制路径

使用贝塞尔曲线绘制路径 大多数时候,我们在开发中使用的控件的边框是矩形,或者做一点圆角,是使得矩形的角看起来更加的圆滑. 但是如果我们想要一个不规则的图形怎么办?有人说,叫UI妹子做,不仅省事,还可以趁机接近她们(_:D).这又时候确实可以.但是如果是一个时刻变动的不规则图形,这样如果做成动图或者剪出很多张图,再叫UI妹子做的话,似乎也能解决, 但是实际效果吧,呵呵. 更重要的是从此以后UI妹子不仅不愿搭理你,连以后接触的机会都不会再给你了.好吧,iOS中我们其实不需要担心这个问题.使用UIBe

html5 Canvas绘制图形入门详解

html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome.Opera.Safari.IE9+)都已经开始支持html5了.除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的支持能力以及性能表现」的军备竞赛.html作为革命性的网页技术标准,再加上众多浏览器厂商或组织的鼎力支持,可以想见,html5将会成为未来网页技术的领头羊. ht

IOS开发——Core Graphics &amp; Core Animation

好久没写过blog了,首先了解下最近苹果和IOS方面的最新消息. 1.WWDC2014在上个月举行了,与2013年一样,今年WWDC没发布硬件产品和新品(如果你懂cook你就会期待今年秋季发布会,预计10中旬举行) 今年WWDC有一个最令人兴奋的新语言发布--Swift,小编也花了将近半个月来学习新语言,发现Swift与反人类语言objective-c不同的是完全抛弃了C,更像是js+lua+python+各种脚本语言的集合,这也是时间上最新最先进的开发语言,小道消息说swift今年4岁,也就是

ios 基本图形的绘制 基于bitmap 位图

内容包括 图片水印,图片裁剪,屏幕截图,背景平铺 1.图片水印功能 #import "UIImage+MJ.h" @implementation UIImage (MJ) + (instancetype)waterImageWithBg:(NSString *)bg logo:(NSString *)logo { UIImage *bgImage = [UIImage imageNamed:bg]; // 1.创建一个基于位图的上下文(开启一个基于位图的上下文) UIGraphicsB

ios 基本图形的绘制

基本图形的绘制 包括: 代码画线,画文字 图片 裁剪 重绘  简单动画 当自定义view的时候 系统会自动调用drawRect 方法 画线 - (void)drawRect:(CGRect)rect { // Drawing code // 1.获得图形上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.拼接图形(路径) // 设置线段宽度 CGContextSetLineWidth(ctx, 10); // 设置线段头尾部的样式

(转)TDD的iOS开发初步以及Kiwi使用入门

本文转自“瞄神”博客 TDD的iOS开发初步以及Kiwi使用入门 测试驱动开发(Test Driven Development,以下简称TDD)是保证代码质量的不二法则,也是先进程序开发的共识.Apple一直致力于在iOS开发中集成更加方便和可用的测试,在Xcode 5中,新的IDE和SDK引入了XCTest来替代原来的SenTestingKit,并且取消了新建工程时的“包括单元测试”的可选项(同样待遇的还有使用ARC的可选项).新工程将自动包含测试的target,并且相关框架也搭建完毕,可以说

iOS开发中通知(Notification)快速入门及推送通知实现教程

iOS开发中通知(Notification)快速入门及推送通知实现教程 标签: NSNotificationCenterNSNotification 2016-11-14 00:18 232人阅读 评论(0) 收藏 举报  分类: iOS(400)  转载自:http://www.111cn.NET/sj/ios8/90190.htm 通知(Notification)是开发框架中观察者模式的一种实现方式,内部的实现机制由Cocoa框架支持,通常用于试图控制器和数据模型的交互.通过通知,可以向一个

Introduction to Bode Plot 波特图入门

Introduction to Bode Plot 神马东东是波特图? A Bode plot /?bo?di/ is a graph of the transfer function of a linear, time-invariant system versusfrequency, plotted with a log-frequency axis, to show the system's frequency response. It is usually a combination o