写在前面

最近做的小Demo中有一个绘制饼状图的需求。在开始实现之前上网了解了一下现有的一些绘制图形的第三方库,相应的库还是有挺多的,PNChart便是其中一个。PNChart是一个90后的中国boy写的第三方库(我还在学基础,人家已经写了一个库了, /心塞),这个库可以绘制饼状图、折线图、散点图等,优点是使用简单,容易上手,有动画效果,而缺点是可定制能力差。

PNChart使用准备

想要使用PNChart绘制饼状图,首先需要在自己的项目中导入该第三个库。导入有两种方式,分别介绍如下

1、使用CocoaPods安装

在Podfile文件中输入 pod 'PNChart'

在终端进入Podfile所在目录,然后运行pod install

在用到PNChart的文件中导入头文件#import PNChart.h

2、手动导入

在github上下载PNChart,下载地址:

将PNChart文件夹导入到工程中。

此外,PNChart有自己的依赖库,分别是:

  • Foundation.framework
  • UIKit.framework
  • CoreGraphics.framework
  • QuartzCore.framework

    在使用PNChart前也要讲上述框架添加到工程中,如下图

开始使用

在我的Demo中,创建了一个view(假设叫Aview),饼状图添加到Aview上,然后创建一个controller,controller.view = Aview。当然,饼状图也可以直接放到controller的view上,但这种方式不利于controller的扩展。

1、在Aview中声明一个PNPieChart类型的属性pieChart

@property (strong, nonatomic) PNPieChart *pieChart;

2、在Aview的初始化方法中对pieChart进行初始化

//初始化
_pieChart = [[PNPieChart alloc] initWithFrame:CGRectZero items:[NSArray array]];
//设置颜色和字体
_pieChart.descriptionTextColor = [UIColor whiteColor];
_pieChart.descriptionTextFont = [UIFont fontWithName:@"Avenir-Medium" size:18.0];

默认的初始化函数为initWithFrame:items,其中items为绘制时需要用到的数据,初始化时可以将该数组设置为空。

3、在Aview中自定义一个绘制pieChart的函数,用于外部调用传入数据

//items为传入的原始数据参数,不需要转化为比例
- (void)drawPieChart:(NSArray *)items
{
//获取要绘制的数据
NSArray *dataitems =
@[[PNPieChartDataItem dataItemWithValue: [items[0] floatValue] color:PNDeepGreen description:@"男性"],
[PNPieChartDataItem dataItemWithValue:[items[1] floatValue] color:PNLightGreen description:@"女性"],
[PNPieChartDataItem dataItemWithValue:[items[2] floatValue] color:PNLightBlue description:@"未知"]]; //更新需要绘制的数据并绘制
[self.pieChart updateChartData:dataitems];
[self.pieChart strokeChart]; //设置标注
self.pieChart.legendStyle = PNLegendItemStyleStacked;//标注摆放样式
self.pieChart.legendFont = [UIFont boldSystemFontOfSize:12.0f]; UIView *legend = [self.pieChart getLegendWithMaxWidth:200];
CGFloat legendX = self.width/2.0;
CGFloat legendY = self.bottom - 2*legend.height;
[legend setFrame:CGRectMake(legendX, legendY, legend.width, legend.height)]; //将标注和饼状图添加到view上
[self addSubview:legend];
[self addSubview:_pieChart];
}

4、在controller中添加view,在需要绘制饼状图的地方调用绘制方法,并传入绘制参数。

绘制结果

下图是一个简单的绘制结果

总结

饼状图的绘制相对来说是比较简单的,绘制的效果也还不错,但有几点需要注意的地方

1、按照上述步骤设置并编写好代码后,运行时发现 #import"PNRadarChartDataItem.h" 报错,此时在该头文件中添加 #import<UIKit/UIKit.h>头文件杰克

2、头文件#import<UICountingLabel/UICountingLabel.h>提示找不到,需要下载该头文件。下载地址: ,下载完后解压将UICountingLabel.h和UICountingLabel.m加入到PNChart头文件中,然后将报错的那句导入代码改为#import<UICountingLabel.h>

3、使用PNChart绘制饼状图时,传入的饼状图数据为原始数据,如下图,PNChart会自动将要绘制的数据转换为比例。



4、PNChart绘制的饼状图中,显示的各比例参数没有小数,因此有时可能会出现饼状图的几个部分之间比例家和不为1的情况。

用PNChart绘制饼状图简介的更多相关文章

  1. 第166天:canvas绘制饼状图动画

    canvas绘制饼状图动画 1.HTML <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  2. Canvas(3)---绘制饼状图

    Canvas(3)---绘制饼状图 有关canvas之前有写过两篇文章 1.Canvas(1)---概述+简单示例 2.Canvas(2)---绘制折线图 在绘制饼状图之前,我们先要理解什么是圆弧,如 ...

  3. canvas动态绘制饼状图,

    当我们使用Echrts很Highcharts的时候,总是觉得各种统计图表是多么神奇,今天我就用现代浏览器支持的canvas来绘制饼状统计图,当然仅仅是画出图并没什么难度,但是统计图一般都有输入,根据不 ...

  4. [canvas]用canvas绘制饼状图

    折线图之后又来饼状图啦~\(≧▽≦)/~啦啦啦 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. IOS之以UIBezierPath绘制饼状图

    1.绘制的饼状图是通过多个扇形拼和而成,绘制一个扇形也是比较简单的,核心代码如下: 先画一条圆弧,再画半径,接着再画一条圆弧,最后闭合路径: UIBezierPath*  aPath = [[UIBe ...

  6. [Echarts]用Echarts绘制饼状图

    在项目网站的网页中,有这样一幅图: 心血来潮,想使用百度Echarts来绘制一下,可是没能绘制得完全一样,Echarts饼状图的label不能在图形下面放成一行,最后的效果是这样子的: 鼠标移动到it ...

  7. d3绘制饼状图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. matplotlib绘制饼状图

    源自http://blog.csdn.net/skyli114/article/details/77508430?ticket=ST-41707-PzNbUDGt6R5KYl3TkWDg-passpo ...

  9. Graphic系统综合练习案例-绘制饼状图

    这里用一个案例来将之前学过的关于绘制相关的东东加强巩固一下,纯绘制,木有加点击效果,先来看下最终效果: github中这种百分比饼图的效果非常非常之多,实际在项目中开发当产品有这样类似的需求时做为开发 ...

随机推荐

  1. linux-2.6.26内核中ARM中断实现详解(转)

    转载:http://www.cnblogs.com/leaven/archive/2010/08/06/1794293.html 更多文档参见:http://pan.baidu.com/s/1dDvJ ...

  2. 函数和常用模块【day06】:random模块(三)

    本节内容 1.简述 2.random模块 3.string模块 4.生成随机数 一.简述 我们经常会使用一些随机数,或者需要写一些随机数的代码,今天我们就来整理随机数模块:random模块 二.ran ...

  3. JAVA 远程通讯机制

    在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB. Burlap.Hessian.SOAP.EJB和JMS等,这 ...

  4. mysql学习笔记-- 多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  5. python 内建函数专题

    all 用来控制 import , 甚至可以改变 _private 为 public enter , exit 用于上下文管理器 iter 用于迭代器 repr 给计算机读, str ==> s ...

  6. c# 网络验证

    #region 检查网络连接 static bool exitResult = false; /// <summary> /// 检查网络连接 /// add by wlzhang 201 ...

  7. 交叉熵的数学原理及应用——pytorch中的CrossEntropyLoss()函数

    分类问题中,交叉熵函数是比较常用也是比较基础的损失函数,原来就是了解,但一直搞不懂他是怎么来的?为什么交叉熵能够表征真实样本标签和预测概率之间的差值?趁着这次学习把这些概念系统学习了一下. 首先说起交 ...

  8. Kafka0.10.0安装配置

    1 解压文件 tar -zvxf kafka_2.11-0.10.0.0.tgz 2 修改配置server.properties vim server.properties broker.id=1 z ...

  9. Caffe源码阅读(1) 全连接层

    Caffe源码阅读(1) 全连接层 发表于 2014-09-15   |   今天看全连接层的实现.主要看的是https://github.com/BVLC/caffe/blob/master/src ...

  10. Django学习手册 - 模板继承与导入

    核心: PS:一个页面只能继承一个模板. 前置: 配置url. 配置views 关键字: 1. {% extends "index模板.html" %} 声明继承于哪个模板 ,关联 ...