首先看一下最终要实现的效果:

最终效果

一、初始化barChartView

绘制柱形图需要用到BarChartView这个类,下面是初始化代码:

self.barChartView = [[BarChartView alloc] init];
self.barChartView.delegate = self;//设置代理
[self.view addSubview:self.barChartView]; [self.barChartView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(self.view.bounds.size.width-20, 300)); make.center.mas_equalTo(self.view); }];

二、设置barChartView的外观样式

1.基本样式

self.barChartView.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1]; self.barChartView.noDataText = @"暂无数据";//没有数据时的文字提示 self.barChartView.drawValueAboveBarEnabled = YES;//数值显示在柱形的上面还是下面 self.barChartView.drawHighlightArrowEnabled = NO;//点击柱形图是否显示箭头 self.barChartView.drawBarShadowEnabled = NO;//是否绘制柱形的阴影背景

2.barChartView的交互设置

self.barChartView.scaleYEnabled = NO;//取消Y轴缩放
self.barChartView.doubleTapToZoomEnabled = NO;//取消双击缩放 self.barChartView.dragEnabled = YES;//启用拖拽图表 self.barChartView.dragDecelerationEnabled = YES;//拖拽后是否有惯性效果 self.barChartView.dragDecelerationFrictionCoef = 0.9;//拖拽后惯性效果的摩擦系数(0~1),数值越小,惯性越不明显

3.设置barChartView的X轴样式

首先需要先获取到barChartView的X轴,然后进行设置.
通过barChartViewxAxis属性获取到X轴,代码如下:

hartXAxis *xAxis = self.barChartView.xAxis;

设置X轴样式的代码如下:

ChartXAxis *xAxis = self.barChartView.xAxis;
xAxis.axisLineWidth = 1;//设置X轴线宽
xAxis.labelPosition = XAxisLabelPositionBottom;//X轴的显示位置,默认是显示在上面的
xAxis.drawGridLinesEnabled = NO;//不绘制网格线 xAxis.spaceBetweenLabels = 4;//设置label间隔,若设置为1,则如果能全部显示,则每个柱形下面都会显示label xAxis.labelTextColor = [UIColor brownColor];//label文字颜色

4.设置barChartView的Y轴样式

barChartView默认样式中会绘制左右两侧的Y轴,首先需要先隐藏右侧的Y轴,代码如下:

self.barChartView.rightAxis.enabled = NO;//不绘制右边轴

接着开始设置左侧Y轴的样式.
首先设置Y轴轴线的样式,代码如下:

leftAxis.forceLabelsEnabled = NO;//不强制绘制制定数量的label
leftAxis.showOnlyMinMaxEnabled = NO;//是否只显示最大值和最小值
leftAxis.axisMinValue = 0;//设置Y轴的最小值 leftAxis.startAtZeroEnabled = YES;//从0开始绘制 leftAxis.axisMaxValue = 105;//设置Y轴的最大值 leftAxis.inverted = NO;//是否将Y轴进行上下翻转 leftAxis.axisLineWidth = 0.5;//Y轴线宽 leftAxis.axisLineColor = [UIColor blackColor];//Y轴颜色

通过labelCount属性设置Y轴要均分的数量.
在这里要说明一下,设置的labelCount的值不一定就是Y轴要均分的数量,这还要取决于forceLabelsEnabled属性,如果forceLabelsEnabled等于YES, 则强制绘制指定数量的label, 但是可能不是均分的.代码如下:

ChartYAxis *leftAxis = self.barChartView.leftAxis;//获取左边Y轴
leftAxis.labelCount = 5;
leftAxis.forceLabelsEnabled = NO;

设置Y轴上标签的样式,代码如下:

leftAxis.labelPosition = YAxisLabelPositionOutsideChart;//label位置
leftAxis.labelTextColor = [UIColor brownColor];//文字颜色
leftAxis.labelFont = [UIFont systemFontOfSize:10.0f];//文字字体

设置Y轴上标签显示数字的格式,代码如下:

leftAxis.valueFormatter = [[NSNumberFormatter alloc] init];//自定义格式
leftAxis.valueFormatter.positiveSuffix = @" $";//数字后缀单位

设置Y轴上网格线的样式,代码如下:

leftAxis.gridLineDashLengths = @[@3.0f, @3.0f];//设置虚线样式的网格线
leftAxis.gridColor = [UIColor colorWithRed:200/255.0f green:200/255.0f blue:200/255.0f alpha:1];//网格线颜色 leftAxis.gridAntialiasEnabled = YES;//开启抗锯齿

在Y轴上添加限制线,代码如下:

ChartLimitLine *limitLine = [[ChartLimitLine alloc] initWithLimit:80 label:@"限制线"];
limitLine.lineWidth = 2;
limitLine.lineColor = [UIColor greenColor];
limitLine.lineDashLengths = @[@5.0f, @5.0f];//虚线样式 limitLine.labelPosition = ChartLimitLabelPositionRightTop;//位置 [leftAxis addLimitLine:limitLine];//添加到Y轴上 leftAxis.drawLimitLinesBehindDataEnabled = YES;//设置限制线绘制在柱形图的后面

5.设置barChartView的其它样式

通过legend获取到图例对象,然后把它隐藏掉,代码如下:

self.barChartView.legend.enabled = NO;//不显示图例说明

隐藏描述文字,代码如下:

self.barChartView.descriptionText = @"";//不显示,就设为空字符串即可

三、为barChartView的提供数据

barChartView提供数据是通过其data属性提供的,首先需要创建BarChartData数据对象,代码如下:

//为柱形图设置数据
- (BarChartData *)setData{int xVals_count = 12;//X轴上要显示多少条数据double maxYVal = 100;//Y轴的最大值 //X轴上面需要显示的数据 NSMutableArray *xVals = [[NSMutableArray alloc] init]; for (int i = 0; i < xVals_count; i++) { [xVals addObject:[NSString stringWithFormat:@"%d月", i+1]]; } //对应Y轴上面需要显示的数据 NSMutableArray *yVals = [[NSMutableArray alloc] init]; for (int i = 0; i < xVals_count; i++) { double mult = maxYVal + 1; double val = (double)(arc4random_uniform(mult)); BarChartDataEntry *entry = [[BarChartDataEntry alloc] initWithValue:val xIndex:i]; [yVals addObject:entry]; } //创建BarChartDataSet对象,其中包含有Y轴数据信息,以及可以设置柱形样式 BarChartDataSet *set1 = [[BarChartDataSet alloc] initWithYVals:yVals label:nil]; set1.barSpace = 0.2;//柱形之间的间隙占整个柱形(柱形+间隙)的比例 set1.drawValuesEnabled = YES;//是否在柱形图上面显示数值 set1.highlightEnabled = NO;//点击选中柱形图是否有高亮效果,(双击空白处取消选中) [set1 setColors:ChartColorTemplates.material];//设置柱形图颜色 //将BarChartDataSet对象放入数组中 NSMutableArray *dataSets = [[NSMutableArray alloc] init]; [dataSets addObject:set1]; //创建BarChartData对象, 此对象就是barChartView需要最终数据对象 BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSets:dataSets]; [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]];//文字字体 [data setValueTextColor:[UIColor orangeColor]];//文字颜色 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; //自定义数据显示格式 [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; [formatter setPositiveFormat:@"#0.0"]; [data setValueFormatter:formatter]; return data; }

barChartView提供数据并设置动画效果,代码如下:

self.data = [self setData];//为柱形图提供数据self.barChartView.data = self.data; //设置动画效果,可以设置X轴和Y轴的动画效果 [self.barChartView animateWithYAxisDuration:1.0f];

四、实现barChartView的代理方法

1.点击选中柱形图时的代理方法,代码如下:

- (void)chartValueSelected:(ChartViewBase * _Nonnull)chartView entry:(ChartDataEntry * _Nonnull)entry dataSetIndex:(NSInteger)dataSetIndex highlight:(ChartHighlight * _Nonnull)highlight{NSLog(@"---chartValueSelected---value: %g", entry.value);
}

2.没有选中柱形图时的代理方法,代码如下:

- (void)chartValueNothingSelected:(ChartViewBase * _Nonnull)chartView{NSLog(@"---chartValueNothingSelected---");
}

当选中一个柱形图后,在空白处双击,就可以取消选择,此时会回调此方法.

3.捏合放大或缩小柱形图时的代理方法,代码如下:

- (void)chartScaled:(ChartViewBase * _Nonnull)chartView scaleX:(CGFloat)scaleX scaleY:(CGFloat)scaleY{NSLog(@"---chartScaled---scaleX:%g, scaleY:%g", scaleX, scaleY); }

4.拖拽图表时的代理方法

- (void)chartTranslated:(ChartViewBase * _Nonnull)chartView dX:(CGFloat)dX dY:(CGFloat)dY{NSLog(@"---chartTranslated---dX:%g, dY:%g", dX, dY); }

运行结果如下:

Demo地址:BarChartDemo.

转载于:https://www.cnblogs.com/wanghuaijun/p/5587746.html

iOS使用Charts框架绘制—柱形图相关推荐

  1. ios 绘制线框_iOS使用Charts框架绘制折线图

    首先先看一下效果: 折线图 一. 初始化折线图对象 创建一个折线图的用到的类是LineChartView.h, 代码如下: self.LineChartView = [[LineChartView a ...

  2. iOS 使用Charts框架 折线,柱状,K线,饼状,雷达全攻略

    我是前言: 大约几个月前我写了一篇文章, 文中简单地介绍了Charts两种图表的样式的使用, 不过有种意犹未尽的感觉, 利用周末的空闲时间再次看了看, 有了新的收获, 今天发出来,分享给大家, 来稍加 ...

  3. cahrt框架 ios_iOS使用Charts框架绘制—折线图

    首先先看一下效果: 折线图 一. 初始化折线图对象 创建一个折线图的用到的类是LineChartView.h, 代码如下: self.LineChartView = [[LineChartView a ...

  4. iOS Charts裤绘制蜡烛图

    Charts 是目前对于绘制各种图表来说相当强大的开源库,底层是基于swift开发的.前两篇文章已经讲过charts的用途及功能,同时使用Charts去绘制曲线图,今天来分享一下绘制蜡烛图的方法. 前 ...

  5. 用Java绘制柱形图_Java使用JFreeChart绘制柱形图

    JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计.JFreeChar ...

  6. Ios常用第三方框架(一)

    一.UI框架 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UIT ...

  7. charts框架 横向 纵向柱状图

    实现效果如下,除了基础的柱状图实现,主要增加了,x ,y 轴的自定义title,可以显示汉字而不是数值.最近一直做charts的集成,所以把心得给大家介绍一下.避免走弯路.由于网上IOS相关的demo ...

  8. 常用iOS、Mac框架和库及常用中文开发博客

    常用iOS.Mac框架和库及常用中文开发博客 文章来源:http://www.th7.cn/Program/IOS/201507/506590.shtml 目录 UI 下拉刷新 模糊效果 AutoLa ...

  9. iOS系统整体框架及类继承框架图

    iOS系统整体框架及类继承框架图 文章目录 iOS系统整体框架及类继承框架图 前言 一.系统架构 二.Cocoa框架 三.Cocoa框架的类继承体系 1.Foundation框架类继承体系 2.UIK ...

最新文章

  1. HPU组队赛B:问题(二进制枚举)
  2. spark代码连接hive_Spark SQL入门到实战之(7)spark连接hive(spark-shell和eclipse两种方式)...
  3. SAP云平台上的ABAP编程环境能做哪些事情
  4. 掌握基于AOP事务管理
  5. Github git 命令下载加速
  6. HTML5 Canvas的基本用法
  7. zabbix监控搭建以及客户端安装
  8. jenkins+postman+newman环境搭建自动化测试
  9. Rtsp之信令交互流程
  10. win7 企业版MAK神key win7企业版激活码
  11. html 竖排导航条,html 导航栏
  12. 最直白的编译原理-基础知识(清华-王书3版)
  13. 2020湖南省技能竞赛获奖名单_2020技能竞赛丨湖南省职业院校技能竞赛我校赛点圆满闭幕...
  14. java swing GUI 俄罗斯方块小游戏,适合初级小白
  15. LCS (动态规划)
  16. 阿里云服务器ecs从购买到上传网站详细教程
  17. 1.12 DICOM彩色图像
  18. 探索未来|一文看懂小米年度技术峰会·硬件专场
  19. day36 cookiessession
  20. 计算机课拔线头检讨书,实验室检讨书.doc

热门文章

  1. CentOS转的服务器磁盘规划
  2. TABCTL32.OCX 文件
  3. 有用就存档,没用就删除,当日清理当日的email
  4. CSSE*PTC student tutoring program student lecturers of 2018-2019 Academic Year.
  5. Ajax -get 请求
  6. linux | 网卡驱动
  7. spring boot 限制初始值大小及参数中文详解
  8. 你真的会使用Glide吗?——Glide的高级用法
  9. 2017年热度最高的十大技术类技能
  10. Servlet开发(二)