如何使用 ggplot2 ？
(已更新至第五节，谢谢关注！) 一.使用示例 1.1 基本绘图 （上图参考了ggplot2_The_Elements_for_Elegant_Data_Visulization_in_R这本书，结合了library(gridExtra)中的grid.arrange()函数整合到一幅图中。看起来有没有小清新的感觉？(●'◡'●) ） 1.2 拓展应用示例1——地图绘制 (上面两幅图由ggmap包绘制，该包结合了ggplot2和maps的长处，非常强大。第一幅我画的，第二幅《中国地震数据可视化》由肖凯老师实现，结合animaiton包实现了动态呈现，见博客 。差距啊( ╯□╰ )) 1.3 拓展应用示例2——主流媒体主题 没接触R以前，曾经在图书馆看到别人推荐的《Excel图表之道》这本书，里面告诉读者如何设计和制作达到杂志级质量的、专业有效的商务图表。各种纷繁复杂的excel技巧让我眼花缭乱而叹为观止。只可惜，excel学起来总感觉效率低下，学了就忘，并且可重用性差，最终它在我的书桌上安静地躺了两个月，又被无奈的还回去了。终于有一天，我看到ggthemes这个基于ggplot2的拓展包，我感觉我的人生又充满了希望。我们来亮两张图，后面会有相应的详细介绍。 （其实只要在ggplot2的代码上额外加一行代码即可实现。有没有瞬间高大上的感觉？） 二.  语法直观认识 以上的命令生成了示例中的散点图。其中，每一个“+”前面的部分都是独立的。也就是说我们可以把变量保存以待下次载入时继续修改或者让你的同事来修改、使用。 绘图过程需要了然于胸，才能避免犯错。其中涉及到的一些概念后续会有介绍。 三. 优势——为什么不用plot 我们前面絮絮叨叨的说了这么多概念语法之类的玄之又玄的话题，有的同学肯定要问了：“我为什么要去接受这些高深莫测的新概念，绘图直接一个plot不就完事儿了吗？” 0.ggplot2的默认设置已经可以使你的图形很精美，精美到甩plot几条大街。 1.基础绘图系统中的plot()函数虽然已经很强大，但是还不够便利。因此，ggplot2有了模仿plot()设计的qplot()函数。 2.基础绘图系统中，有两类绘图函数，低级函数和高级绘图函数。高级绘图函数绘制的是一个完整的绘图函数，低级绘图函数在已有的图形对象中进行添加，相当于ggplot2中的图层叠加概念，但是肯定没有ggplot2的图层概念强大。假设你要用plot绘制一个类似分面的图形，那么你可能需要n个可重复的步骤，然后通过par()中的mfrow参数来整合到一块儿。 3.函数和参数设置方便记忆。这一点非常重要。你不需要像SAS绘图系统那样牢记几十上百个参数就可以绘制比SAS绘图系统更漂亮的图形（我也不知道为什么突然跑题去黑SAS了( ╯□╰ )）。在R绘图设备中，每一个不同的图都有一个独特的函数比如boxplot()，hist()，barplot()等；然而在qplot()函数中，用geom参数取不同的值即可画不同的图，而geom_+图形对象名即可绘制不同的图。结合Rstudio开发环境下的参数提示、函数提示和自动补全功能，再也不用担心复杂的参数和函数记忆问题了。 4.我觉得最重要的是，ggplot的代码可重用性更强，可以很方便地定制化一些带有你自己特色的图形。如果你是上班族，每隔一段时间就需要做一些重复性的数据分析工作，那么这个特点对你帮助更明显。 四. 快速入门——qplot qplot(),是quick plot 的缩写,顾名思义，就是让你快速的绘制一幅图。Hadley建议我们，如果想学好R中的函数封装，应该认真阅读qplot的源码，理解它的工作机理。可见，这个函数是非常值得学习的。代码长度不到100行，但我目前还没完全看懂( ╯□╰ )。 先来看一下qplot()的参数。 这个函数从参数个数来看，可谓是，麻雀虽小，五脏俱全。 来个例子。 要在基础绘图中实现这个图形，需要至少两步，而这里只需要一步。 再看一个例子。 这个图，用基础绘图可能就不是一步两步就能搞定了。我推荐的几本书都有很多的使用示例，这里就不多赘述了。总之一句话：如果你想快速的看看数据的形态，qplot应该是你的首选。 五. 绘图流程——让思路更清晰、图形更优雅 5.1 数据准备 说到数据准备，就不得不提同为Hadley开发两个专用于数据清洗的包：dplyr和reshape2.这两个包也可以说是为ggplot2而生。三者结合起来，简直妙不可言。代码可以写得非常优雅，图形也会更有表现力。他们都是基于data.frame的数据结构之上。 5.1.1 dplyr的理念介绍和示例 - 时间是宝贵的。关键的部分由Rcpp写成。 - 本地能做，远程也理应能做。远程数据库接口支持： PostgreSQL, MySQL, SQLite 。 - 每个函数只做一件事，并把它做好。group_by,summarise,mutate,filter,select,arrange等等这些函数组合起来，几乎可以胜任所有日常的数据清洗工作. - 另外，我觉得最重要的是管道操作的功能。操作符‘%>%’可以把前一步处理的结果当作第一个参数传给下一个处理函数。这个操作让你的代码更具有可读性，处理数据的思路过程也更清晰。 理念介绍参考< > 举个例子。 操作介绍可以参考< > 由于这里的主角是ggplot2，其它的一些使用细节就不多谈了，详细使用请参考给出的链接。 5.1.2  reshape2与ggplot2结合的示例：anscombe数据集可视化。 如果接触过数据库的同学，对“长表”和“宽表”应该有所理解。而reshape2就是用于这二者的转换。reshape2目前我只用过两个函数：melt()和dcast().这两个函数用来“糅数据”简直无敌。随便你怎么在宽表和窄表之间转换。 详细使用可以参考< > 这里举一个我实现的非常有意思的例子。 （后续添加anscombe数据集的介绍。） 可以得到如下的图。 5.2 创建图形对象 如下所示，用ggplot()函数创建一个图形对象。 参数映射，只需要把需要映射到图形属性的变量名放到aes()函数内即可。 5.3  添加图层 可以使用layer()函数添加图层。如绘制以carat为x轴，price为y轴的散点图。 对于每一个图层，我们只需要设定stat或者geom参数即可。这是因为每一个几何对象都对应一个默认的统计变换和位置参数，而每一个统计变换都对应着一个默认的几何参数对象。 也可以使用快捷函数来简化以上代码。 以上三种方式都可以生成同一幅图形。 5.4 数据 ggplot2需要传入一个data.frame格式的数据。数据的前期准备前面已有介绍。而数据在图形图像中是以副本的方式保存的，这说明我们可以保存图形对象（ggsave()）以待下次加载(load())。 5.5  图形属性映射aes() aes()用来将数据变量映射到图形中。 如aes(x ,y,colour=z)； 又如aes(x,y,group = z)——将数据分成若干组，并用相同的方式对每个组进行渲染。值得一提的是，当现有的单个变量不能够正确的分组而两个变量的组合可以正确分组时，可以使用interaction()函数进行分组。 5.6 几何对象 几何对象：简称geom，控制生成的图像类型，如geom_line(),geom_point(),geom_bar(). 5.7 统计变换 统计变换：stat。它通常以某种方式对数据信息进行汇总。ggplot2中包含的统计变换有如下多种。 统计变换可以向原数据集中插入新的变量。示例。如 以上统计变换生成了一些新的变量count,density,x。我们可以在aes()中调用这些变量。 5.8 位置调整 置调整一般多见于处理离散性数据。如条形图中的：堆叠(stack)，填充(fill)，并列(dodge)。 此外，还有jitter:给点添加扰动避免重合；identity:不做任何调整。 如下所示： 5.9 对象整合 5.9.1 几何对象+统计变换. 示例：直方图的几种变体. 5.9.2 将不同来源的数据画在同一张图 举例：用模型拟合出来的预测值来扩充原数据集； 六. 调整策略——让图形更有表现力 七. 深度加工——专业化主题定制 八. Next Generation——ggvis ggvis介绍： < > 九. 学习资料推荐