美文网首页iOS学习资料
浅谈折线图 --- 希望的翅膀

浅谈折线图 --- 希望的翅膀

作者: 希望的翅膀 | 来源:发表于2016-08-09 10:44 被阅读264次

    折线图这个东西在我这家公司之前很少触及,因为我之前很讨厌贝塞尔曲线,虽然简历上写着熟悉贝塞尔曲线,会用它做各种图。但是只有我自己知道这说的纯属瞎话,每次遇到需要画特殊的图形的时候无百度不成图!

下一篇我将通过写的两个小demo继续来讲讲柱状图,以及折线图

    当前这家公司接手的第一个项目,是要做一款天气项目,类似于墨迹天气当然,功能上没有那么复杂先简单上一下主界面图

这里需要用到柱状图,和折线图来展示数据

前面还有很多利用贝塞尔曲线画出的很多不规则图形

之前没有接触过类似的项目,所以自然而然的项目里选择了使用第三方框架PNChart、ZFChart

PNChart是一款非常流行的主流Chart,适用于折线图,柱状图,饼状图,我这里折线图用的它,柱状图用的ZFChart,原因是 PNChart在柱状图方面有一点BUG,这点在github上面也有人提交了issue给作者,相信很快能得到解决。

简单聊一下PNChart的实现及封装理念,这里我是用CocoaPod导入的

从它的驼峰命名来看,基本可以清楚每一个类大致是做什么用的Pie是饼状图

这里的chart都是继承至 PNGenericChart 

来看一下这个基类里做了哪些操作,在这里声明了所有Chart共有的属性,两个结构体分别是chart的方向与风格(串行和堆叠)字体大小及颜色等属性

简单说一下他的封装理念,以折线图为例,虽然光折线图就有一千多行代码看着让人头皮发麻,但仔细琢磨下作者的手法你会感觉到 握草!还能这样封装!

先来看一下里面有哪些方法,作者对他们进行了分类这有就一目了然

初始化方法就不必再说,先看看坐标轴是怎么画出来的

就这么些代码,承载折线图的坐标系就出来了,这只是雏形,先新建一个上下文,接着在设置线条的属性,接着就是x轴和y轴的起始点了再进行连线,当然别忘了画小贱头

看一下坐标轴上的分段点是怎么画出来的,其实没有多么复杂

只要你稍微有点基础就能看明白,唯一麻烦的可能就是计算位置了

接下来就是画出x轴上和y轴上的label这些东西都比较简单,找准位置就行,简单说一下他的封装理念,然后通过我自己写的一些demo来谈谈我的理解

我们知道折线图是从一点到另一点的,这里动画可能看不清,他是从左到右画线的动画,作者是先将每一个坐标点计算出来,利用for 循环坐标点的个数,在每一次的循环里 将第一个坐标点A作为起始点 “from”下一个B作为终点"to"再利用数学公式计算出两点间距离,当然每次的循环里都有

CGRect circleRect = CGRectMake(x - inflexionWidth / 2, y - inflexionWidth / 2, inflexionWidth, inflexionWidth);

CGPoint circleCenter = CGPointMake(circleRect.origin.x + (circleRect.size.width / 2), circleRect.origin.y + (circleRect.size.height / 2));

//画坐标点小圆圈

[pointPath moveToPoint:CGPointMake(circleCenter.x + (inflexionWidth / 2), circleCenter.y)];

[pointPath addArcWithCenter:circleCenter radius:inflexionWidth / 2 startAngle:0 endAngle:2 * M_PI clockwise:YES];

这里是画上每个点的小圆环

然后通过

将两个点之间的路径作为字典存放在数组中,然后将B作为起始点,下一个C作为终点重复以上

然后再取出每个点连上线,这里由于项目需要,我改动了一些加了一些判断条件如果当前点没有数据就断掉,

作者封装的很不错,我暂时也只能理解一部分,懂个大概,知道怎么去用怎么去修改,不过一般这种自定义很高的东西最好还是自己学会怎么去自己写出来,毕竟别人的有很大的局限性,下一篇我自己封装了一个简单的chart

相关文章

  • 浅谈折线图 --- 希望的翅膀

    折线图这个东西在我这家公司之前很少触及,因为我之前很讨厌贝塞尔曲线,虽然简历上写着熟悉贝塞尔曲线,会用它做各种...

  • 《希望翅膀》

    翅膀是每一个人的向往 它是精神上的,也是实际。 有了翅膀 我将把阳光与快乐拥抱 有了翅膀 我将脱离怀抱 它不 是梦...

  • 抓住希望的翅膀

    很难想像 如果没有了希望 人世间会变成什么模样 黑夜里 希望 就像黎明前的微光 指明了 前行时的方向 黎明前 希望...

  • 希望和翅膀

    日复一日似乎是时光的馈赠,给予生命以仁慈和慰藉,让人们学会相信在每个黑夜的尽头都等有可能诞生的希望,而天空则...

  • 举个栗子!Tableau 技巧(239):学做平滑曲线图

    我们经常用折线图来分析数据趋势,不少数据粉希望折线图可以再美观一些,比如变成曲线。 虽然目前 Tableau 折线...

  • 浅谈“希望”

    希望此物,不单单是春风之中、甘霖之下、绿水青山之间的渐次生长。往往是那夜幕沉沉,烂泥潭里或是贫瘠土地中,生长出...

  • 你知道Excel中折线图的制作技巧吗?赶快学起来

    你会用Excel做折线图吗?今天与大家分享有关折线图的制作技巧,希望对大家有所帮助,不会的小伙伴赶快看看吧! 第一...

  • 梦是希望的翅膀                        

    织梦新手小小用美好的天赋使心灵受到巨大创伤的男孩约翰成长,但可怕的生物殷险马使约翰的心灵越来越脆弱,虽然...

  • 为什么你做的折线图那么生硬?

    今天来讲解基本图表,折线图,以及折线图特有的美化技巧。我们常用的折线图有两种:折线图和带数据标记的折线图。数据标记...

  • 希望会长出翅膀

    人生真的是前一秒钟幸福无比,后一秒钟痛不欲生,心中纵使有千般不愿发生这样的事!但是,它还是发生了!我一直以为我很了...

网友评论

  • plu: 大神,能给小女子一个Demo么??谢谢啦
  • 凯文Kevin21:楼主,我加你qq了。。
  • 凯文Kevin21:楼主,我现在想做一个可以双击放大缩小的折线图,,有没有什么好的建议。。
    我的需求是:当数据很多的时候,在一个屏幕上放不下,用UIScrollView左右滑动又不太好,想在一个控制器里面显示一部分数据,另外的数据显示在屏幕外面,然后点击缩小就可以在一个屏幕下显示了。双击就可以放大了。
  • 自在轻梦:大神,我现在也是要做这一块,请问大神如何才能让横纵坐标轴随数据变化自动变化呢?
    自在轻梦:@自在轻梦 另外,你封装的有么,能让我借鉴下不,谢谢啦,724096472@qq.com 这是我邮箱







    希望的翅膀:@自在轻梦 你具体描述一下你的需求
    希望的翅膀:@自在轻梦 取数据的最大值 做 坐标轴 的最大值

本文标题:浅谈折线图 --- 希望的翅膀

本文链接:https://www.haomeiwen.com/subject/oazrsttx.html