ggplot2介绍——从qplot快速入门

写在前面

这两天小编有点事情要处理,所以文章没有及时更新,先对各位说声抱歉了。上期文章中,小编和大家介绍了xlsxwriter库的快速入门,对xlsxwriter操作Excel的基本过程有了一个基本了解,后续会进一步加大对于这个库的相关介绍。本期文章中,小编将和大家继续聊一下图形绘制那些事,所谓一图胜万表,所以小编会定期地介绍一下图表的绘制方法。本期文章中,小编将和大家聊一下小编目前为止所接触的最优秀的绘图库ggplot2,这个库目前运行在R语言中,不过在python中也已经存在了这个库的低级版本ggplot。所以了解这个库系列对于绘图实践可以说大有益处,小编会用一系列的文章将这个绘图包的语法介绍清楚,本期文章将作为这个系列的开篇之作,也可以算作是快速入门教程吧。现在就让我们进入这个神器一般的绘图包吧!

ggplot2简介

ggplot2是R语言中最优秀的绘图包(目前在python中也已经可以使用,不过python中使用的是ggplot),也可以说是目前最优秀的绘图工具之一,自然也是小编最喜欢和最常用的绘图工具。一直以来小编都想和大家好好聊一下这个包的一些事,然而总是没有规划好写作框架,以致于对这个库的介绍一直迟缓,现在终于有了一个比较明确的写作框架了,因此介绍这个包的时机终于来到。

首先需要解决一个认知问题,什麼是ggplot2?如果看过小编文章的朋友此时应该知道对于这个术语需要进行拆词:ggplot2=gg+plot+2。其中的gg是《Grammer of Graphics》这本书的英文缩写(中文名称图形语法,强烈推荐细读一番,绝对能够提高你的整体图形掌握程度及绘图技巧);plot是绘图的英文单词;2顾名思义就是第二代的意思了。所以ggplot2就是指基于图形语法的第二代绘图包。这个R语言绘图包是由Rstudio的首席科学家Hadley Wickham(哈德利·威克汉姆)创建,至今已在R语言世界获得了最为广泛的运用。之前的版本是ggplot,但后来哈德利大神觉得ggplot的语法命令不是很好,就重新创建了这个包的另一个版本ggplot2,所以ggplot2与ggplot具有不同的语法命令,如果你初次接触这个系列就直接从ggplot2开始吧。

正如前文讲到的那样,因为ggplot2是基于图形语法这本书,因此ggplot2中的绘图是基于图层概念,这与其它绘图系统存在很大不同。其它绘图系统是直接出图,然后再对图形的不同部分进行格式调整,但是ggplot2绘图就是典型的堆积木,按照你的想法把各个要素添加到画布之上,这一点相信有过PS的朋友肯定很熟悉。所以ggplot2绘图的本质就是数据到图形属性的映射。这里有必要先和大家聊一下ggplot2绘图中的一些基本概念。

最基础的部分就是需要可视化的数据集以及数据集中的变量到图形属性的映射;

几何对象(geom):代表你在图中实际看到的图形元素,如点、线、多边形等;

统计变换(stats):对数据进行的某种汇总。例如,将数据分组计数以创建直方图,或者将一个二维的关系用线性模型进行解释。统计变换是可选的,但通常比较有用;

标度(scale):将数据的取值映射到图形空间,例如用颜色。大小或形状来表示不同的取值;

坐标系(coord):常见的无非就是笛卡尔坐标系和极坐标系

分面(facet):描述如何将数据分解成各个子集,以及如何对子集进行作图并联合进行展示。

这些概念在后续文章中都会进行相关介绍,本文因为属于一篇先导文章,所以就不对这些概念进行系统介绍,而是简单地介绍这些概念的运用。本文将从qplot开始讲解ggplot2的用法,为了确保你能够正常使用qplot,请先打开R语言窗口或者打开Rstudio(小编强烈推荐使用Rstudio),然后在命令行窗口中输入以下命令进行ggplot2包的安装。

当然你也可以在python环境中通过使用安装ggplot这个库,不过如果你真的想要使用ggplot系列的话,小编还是之前那句话,请在R语言中使用ggplot2,本文也是围绕ggplot2进行展开的,所以有些命令无法在python中实现。好了,现在让小编带领大家从qplot正式进入ggplot2的世界吧!

ggplot2快速入门——qplot

qplot,从字面意思就可以很明白地看出其目的是快速作图(quick plot)。这将是大家接触到的第一个ggplot2命令,也将是一个最为懒惰的命令。如果你只是想通过ggplot2去进行一些基本图形的快速绘制,或者说你并不想深入地了解ggplot2的深层语法,那么你只需要掌握这个命令就可以了,或者说你只需要读完本文就OK了。

数据集与快速入门语法介绍

本期文章中,小编将主要使用ggplot2包中自带的数据集diamonds以及economics,后面为了作图清晰的目的也会在diamond数据集中随机抽出100个样本生成一个较小的数据集dsmall。因为这期文章中的作图多是基于diamonds数据集,下面看一下这个数据集的一些相关特征。

diamonds数据集中主要存放了5400颗钻石的价格与质量的信息,前四列主要是钻石的质量信息,后面六列除了price这一列之外的其余五列分别是钻石的物理指标。因为diamonds数据集中样本数量较多,因此在作图时很多时候会发生重叠现象,为了便利图形的清晰,这里在5400个样本总随机抽出100个构成一个小样本数据集。

第一条命令是为了设置一个随机种子,以便于每次生成的随机样本是一样的,最重要的是便于大家的操作结果和小编一样;第二行用于在原数据集中随机选取100个样本,这里涉及到的一些R语言命令都是基本的R语言知识,小编就不进行讲解了。现在已经有了相关数据,那就来小试一下牛刀吧。

qplot作图初探1

代码中的前两行主要用来导入相关的包(其中gridExtra包不是一定的,小编这里只是希望能够在一个画布上绘制多个图所以才导入了这个库,如果你没有这样的需求是可以不用导入这个包的);中间的四行代码分别绘制了四个图形,前两个图形以diamonds数据集进行绘制,后两个图形以dsmall数据集进行绘制;最后一行代码是用来布置绘制的四个图形的,小编这里将其布置为2行2列,你可以通过设置和的值来自定义图形布局。

而在绘图命令中,小编主要采用了qplot命令,小编这里绘制了钻石的重量carat和钻石的价格price之间的散点图,也就是qplot函数的前两个参数;第三个参数是采用的数据集,小编强烈建议要使用这个参数,这样不管是你自己还是别人都能很明白地知道你是基于什麼数据绘制图形的。在绘制原数据的散点图后,可以很明显地看出重量和价格之间存在着很大相关性,因此小编接着绘制了对数后的数据散点图,进一步验证了两者之间存在正相关。在其它绘图程序中,如果需要绘制重量和价格对数后数据的散点图,那么首先要建立两列对数数据列,而后再进行作图,但是在qplot中,这个是不需要的,仅仅需要对数据进行对数化就可以了,也就表现为代码中和,这就是qplot的简便之处,也可以说是整个ggplot2的整体优势之一。在绘制了图形之后,需要对图形进行颜色、大小、形状以及其它图形的设置,这在qplot中异常简单,你仅仅需要对颜色、大小等图形属性指定所需要映射的的数据即可。小编这里分别对上面的图形进行一下颜色、大小、形状以及透明度的设置。

qplot初探02

第一个图中,小编将数据集中的color一列数据映射到图形的colour属性之上,因此绘制出的图形会根据color的类别分别标示以不同的颜色;第二个图形中,小编将cut数据映射到图形的形状属性上;第三个图形中小编将price数据映射到图形的大小属性之上,需要注意的是在对图形的大小进行映射时最好使用连续型数据;第四个图形是对推行进行透明度设置,其中值越小图形透明度越低。注意在对透明度进行设置时,小编使用了,这个常用于将图形属性设置为唯一值,值得注意。上面通过一些图形以及绘图命令的介绍,初步了解了qplot作图的快速语法,下面就以一下常用图形来进一步实践一下qplot的绘图。注意,图形在ggplot2中也被称之为几何对象。

qplot与常用几何对象

完整的ggplot2命令在绘制图形时,是需要进行几何对象的声明的,如果你要绘制散点图、条形图、折线图等,你必须在命令中进行几何对象声明。但是刚刚在使用qplot进行绘图时,小编似乎没有使用这些声明命令,这个就是qplot之所以叫作快速作图的原因。因为在qplot中设置了默认几何对象,当你绘制两个变量之间的关系时,它默认绘制散点图;当你只有一个变量时,它默认绘制直方图。然而,为了完全掌控整个图形的绘制,小编建议在绘图时务必进行几何对象的声明,这在qplot中主要是通过这个参数进行实现。下面是一下常用的几何对象声明。

geom = 'point'绘制散点图。这是绘制两个变量时qplot的默认几何对象

geom = 'smooth'拟合一条平滑曲线。这种几何对象常常和散点图一起出现,用来探索数据的整体趋势。

geom = 'boxplot'绘制箱线图。

geom = 'line'绘制折线图。常常用于绘制时间序列数据

geom = 'path'绘制路径图。描绘图形的具体走向与走势,较少使用。

geom = 'histogram'绘制直方图。

geom = 'density'绘制密度曲线,

geom = 'bar'绘制条形图。

geom = 'pie'绘制饼图。小编能不使用就不使用的类型。

这些几何对象只是小编最常用的,qplot中几何对象远不止这些,但是谁又需要掌握全部的图形呢,毕竟很多也用不到。

散点图和平滑曲线

在绘制散点图时,尤其是数据点较多的散点图时如果加上一条拟合曲线,那么就可以很方便地看出整个数据的趋势,从而便于分析,下面就绘制一些这类图形进行说明吧。

散点图与平滑线

绘图代码中前两行代码分别绘制了diamonds和dsmall数据集的散点图与拟合曲线,可以看出重量和价格之间存在相关性;后两行代码通过设置的值来定义拟合曲线的平滑程度,值的大小在0-1之间,值越大越平滑。

在使用qplot绘制拟合曲线时,默认采用的方法是局部回归(loess)默认采用的模型是线性模型(lm),对于这些默认值你完全可以自己设置,这依赖于你的计量水平,小编这里就不再对讲,不然就成计量课了。

箱线图和扰动点图

当一个数据集中包含一个分类变量和一个或多个连续变量,如果你想考察连续变量如何所分类变量改变,那么箱线图和扰动点图就派上用场了。箱线图一般又被称之为五分位图,源自于其使用五个数值对数据进行概括,而扰动点图则是将数据点全部显示,因此当数据点较多时,重叠便不可避免,因此对于扰动点图设置透明度是很有必要的。

箱线图和扰动点图

上述图形绘制中因为并不存在新的命令以及参数,所以就不再多做说明。

直方图和密度曲线图

直方图与密度曲线图主要用来展示单个变量分布情况,一般不太容易进行组别间对比,虽然可以通过堆积绘制重叠的形态绘制对个组别之间的直方图,但是这样处理的图形存在着很大的不便,因此,小编主要讲解单个变量的直方图与密度曲线图绘制。

直方图与密度曲线图

直方图中主要通过binwidth来设置组距,当组距较大时,图形能反映数据的总体特征,当组距较小时,则能显示出更多的细节;而密度曲线图的绘制则是通过adjust来控制曲线的平滑程度,值越大越平滑,取值在0-1之间。

条形图

条形图有点类似直方图,仅需要将几何对象进行改变即可。这里就不再多说。

条形图

折线图和路径图

折线图常用来绘制时间序列数据,从而揭示数据的趋势特征;而路径图则完全是按照数据的出现顺序依次连接,这种图形相对于折线图运用较少。

折线图和路径图

分面图绘制

上面聊了一下常用的一些图形绘制,下面讲一下ggplot2中另外一个高级操作:分面。它将数据集按照类别分成若干子集,然后基于每一个子集绘制图形,最后将所有这些子集图展示在一个图形矩阵中,从而便利各组数据间比较。这里初步看一下利用分面绘制的图形,更多详细介绍见后续文章。

分面图形绘制

qplot函数中的其它参数

上文对各类常用图形的绘制进行了介绍,然而只是对图形绘制进行了说明,未对图形的标题、坐标轴的格式进行介绍,下面对这些进行一下说明。

xlim,ylim:设置x轴和y轴的显示区间,取值为一个长度为2的向量

log:用于设置对数坐标轴,如果设x轴为对数坐标轴只需加上log='x';如果设y轴为对数坐标只需加上log='y';如果设置双坐标轴则用log='xy'

main:用于设置图标标题

xlab,ylab:用于设置x轴和y轴的坐标轴标题

下面用一个例子进行说明。

钻石重量与价格关系图

后记

本文讲到这里就暂告一段落了,本期文章介绍了ggplot2的快速绘图函数qplot,了解了qplot在作图时的快捷便利。本期文章可以作为ggplot2系列文章的先导文章,也可以算作是ggplot2的快速入门。如果你只是想通过ggplot2快速绘制一般图表,而对于内中语法以及个性复合化图表绘制缺少要求,那么本文不啻是你的首选。关于ggplot2的更多文章将在后续依次展开,下期文章小编将继续和大家聊一下xlsxwriter库的一些语法,敬请期待。再次感谢你们的支持与鼓励,你们的陪伴是小编前进的动力!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180529G1SORU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券