最近的项目里面用到了饼图和条形统计图,饼图用的是PNChart来做的,这个库感觉用起来也简单,但是做条形统计图的时候就特别蛋疼(不知道是不是我姿势没对),反正就是各种问题,然后就想到换一种框架,最后选定了iOS-ECharts,ECharts是百度团队开发的。iOS-ECharts是Pluto Y封装的,蛋疼的是一句注释都没有,要对照着百度的文档来看,这个框架的效果倒是牛皮哄哄的,第一次加载会有点慢,要等一下,还有就是在配置PYOption的时候,属性特别的多,不管是用block还是创建对象来设置都看着比较多,没办法,还是得一个一个的设置好。我自己单独又封装了一遍,用起来变得稍微简单一些了。至少看着没那么大一堆的东西在那放着。不吐槽了。先看下demo的效果吧(只做了4个条形图哦)

暂时就做了这四种样式,感觉比较常用的,还有更复杂的要求的,可以参考Pluto Y写的Demo,demo链接在此,各个参数的参考手册在此

最后一张图是我要用到的效果,看着挺简单的,绕了我好久才知道怎么做。原因是忽略了一个属性,在PYCartesianSeries里面有个属性是stack,这个属性是用来做堆积图的,就好像图二这种,当你添加了多个series的时候,并且把stack值设置成一致,就会堆积起来,如果不一致就会变成图三,变成类似于分组的展示,当然这些bar的宽度都是可调的,还能放大缩小(暂时没做这个功能,可以参考大神demo),然后就是颜色的问题,在配置PYOption的时候,这个东西里面有一个color,类型为id,实际就是传一个数组就好了,每种颜色对应一个类别legend.data,当颜色个数没类别多时就会循环利用颜色值。调用代码如下:

    self.option = [XBZPYOptionManager configOptionWithStack:@[@"common", @"common", @"common"]];
self.option.color = @[@"#FF0000", @"#00FF00", @"#0000FF"];
self.option.legend.data = @[@"水果", @"肉类", @"蛋类"].mutableCopy;
self.option.xAxis.firstObject.data = @[@"苹果", @"香蕉", @"鸡肉", @"鸭蛋", @"恐龙蛋"].mutableCopy;
self.option.series[].nameEqual(@"水果").dataEqual(@[@"", @"", @"-", @"-", @"-"]);
self.option.series[].nameEqual(@"肉类").data = @[@"-", @"-", @"", @"-", @"-"].mutableCopy;
self.option.series[].nameEqual(@"蛋类").data = @[@"-", @"-", @"-", @"", @""].mutableCopy; [self.echartsView setOption:self.option];
[self.echartsView loadEcharts];
XBZPYOptionManager这个类是我自己封装了一遍(里面预先设置了一些通用的属性,后面就根据不同的要求修改数据源就好了),根据传入的stack个数来创建相应个数的series,也就是类别legend对应的数据源设置类,我将他们的stack都设置成一致,然后不同类别的
数据都使用@"-"进行补位,本来应该叠加到一起的三种柱状图就此变成了一种(机智如我),然后就实现了图四的样子,再来看看stack不同的时候:
    self.option = [XBZPYOptionManager configOptionWithStack:@[@"one", @"two", @"three"]];
self.option.color = @[@"#AA0000", @"#00AA00", @"#0000AA"];
self.option.legend.data = @[@"水果", @"肉类", @"蛋类"].mutableCopy;
self.option.xAxis.firstObject.data = @[@"一月份", @"二月份", @"三月份", @"四月份", @"五月份"].mutableCopy;
self.option.series[].nameEqual(@"水果").dataEqual(@[@"", @"", @"", @"", @""]);
self.option.series[].nameEqual(@"肉类").data = @[@"", @"", @"", @"", @""].mutableCopy;
self.option.series[].nameEqual(@"蛋类").data = @[@"", @"", @"", @"", @""].mutableCopy; [self.echartsView setOption:self.option];
[self.echartsView loadEcharts];

大的类型依旧不变,stack的值都互不相同,将x轴的数据变成按月来做统计,然后数据不补位,如此便得到了图三的效果,这个是比较容易的,看大神的demo就很容易知道。其他两种就不多说了。都差不多类似了。之前网上找来找去都是一篇文章,然后放弃了,最后加了他们的群也没给我整明白,还是得靠自己,反复的看demo终于让我找到了这个问题所在。在此基础上还可以做更多灵活的变通。希望可以帮到跟我遇到一样问题的盆友。

最后附上我这个demo的地址,(里面我也没写啥注释,哈哈,基本的属性还是得看文档和自己实践才能印象深刻)

使用第三方库iOS-ECharts做柱状图的心得的更多相关文章

  1. python中常用第三方库记录

    python中有很多很好用的第三方库,现在记录一下这些库以及如何下载 一.virtualenv,这是一个可以将生产环境隔离开的python库,非常好用 在linux下使用pip install vir ...

  2. iOS开发常用第三方库

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

  3. IOS常用第三方库《转》

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

  4. iOS 第三方库、插件、知名博客总结

    iOS 第三方库.插件.知名博客总结 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图 ...

  5. iOS常用第三方库大全,史上最全第三方库收集

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

  6. iOS非常全的第三方库

    iOS ● 非常全的三方库.插件.大牛博客等等   github排名:https://github.com/trending, github搜索:https://github.com/search. ...

  7. 最全面的iOS和Mac开源项目和第三方库汇总

    标签: UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UIT ...

  8. iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView

    iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView 时间:2016-01-19 19:13:43      阅读:630      评论:0      收藏:0   ...

  9. ios常用的第三方库

    ios开发中有可能用到的第三方库进行记录一下: 注:资料信息来源于网络 自己整理  https://developer.apple.com/reference(苹果官方文档) https://gith ...

随机推荐

  1. select获取选中项的值与文本

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

  2. 浅谈jquery中prop()和attr()

    我们都知道,一般在jquery中设置属性时要用到attr()方法,现在我们有一个效果,点击按钮切换复选框的选中状态,下面贴出html代码: <input type="checkbox& ...

  3. CSS背景相关属性

    CSS样式可以精确控制HTML元素的背景.边框的样式和外观,也可以精确控制边框的线型和形状.其中,背景相关属性可以用于控制背景色.背景图片等属性.在控制背景图片的同时还可以控制背景图片的排列方式. 常 ...

  4. webservice使用windows身份验证,ajax请求报错401未授权的解决办法

    $.ajax({ type: "GET", url: service_url, dataType: "xml", data: "ParamId=&qu ...

  5. nodejs项目windows下开机自启动

    Nodejs项目开机自启动 1. 在需要自启动的项目中安装 node-windows 模块 npm install node-windows --save 2. 在项目根目录创建nw.js文件 代码截 ...

  6. Sql-exec

    --显示sql server现有的所有数据库 exec sp_helpdb --查看数据表设置的约束 exec sp_helpconstraint SubjectType --update selec ...

  7. Apache服务器运维笔记(3)----容器部分

    1.<IfModule>容器 <IfModule>容器作用于模块,它会首先判断模块是否载入,然后再决定是否进行处理,也就是说只有当判断结果为真时才会执行容器内的指令,相反如果为 ...

  8. Android fastjson

    Fastjson介绍 Fastjson是一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一. 2.功能qiang打,支持JDK的各种类型 ...

  9. Ubuntu 18.04 的网络配置

    netplan简介 目前,ubuntu18.04上使用了netplan 作为网络配置工具:在终端上配置网络参数跟之前的版本有比较大的差别 Netplan工作流程如下图所示:通过读取  /etc/net ...

  10. vue2.0中的watch和计算属性computed

    watch和computed均可以监控程序员想要监控的对象,当这些对象发生改变之后,可以触发回调函数做一些逻辑处理 watch监控自身属性变化 <!DOCTYPE html> <ht ...