R语言可视化—–ggplot2 核心概念
专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。
【R语言】已开通R语言社群,五湖四海,天南地北,各行各业,有缘相聚,共享R事,雕刻数据,求解问题,以创价值。喜乐入群者,请加微信号luqin360,或扫描文末二维码,添加为好友,同时附上R-入群。有朋自远方来,不亦乐乎,并诚邀入群,以达相互学习和进步之美好心愿。
ggplot2是R中最受欢迎的绘图工具之一。其是一套高级的图形系统,发明了一套用于绘图的图形语法,这一套图形语法极大的简化了绘制复杂图形的。根据ggplot2的理念,一个统计图形可以被划分成为三个部分:Plot(图形)= data(数据) +Aesthetics(图形美学) +Geometry(几何变换)。
• 数据: 使用ggplot2进行绘图,数据集的格式一般是数据框的格式。
• 图形美学: 指定x和y变量,同时用来指点图形的颜色、大小、形状等。
• 几何变换: 几何变换用于指定绘制什么统计图形,条形图、点图或者任何图形。
ggplot2提出关于统计图形的图形语法,而数据,图形美学,几何变换则是绘制统计图形的几个关键的要素。ggplot2包含两个关键的函数:
-
qplot:用于快速的绘制统计图形
-
ggplot2:通过不同的图层绘制图形,比qplot更加的灵活
在绘制好图形之后,last_plot()函数,可以返回最近绘制的一幅图形。而ggsave(“plot.png”,width = 5, height = 5)函数,则可以将最近绘制的图形保存下来。
qplot的语法类似于R的基本plot函数,其参数包括:
-
x:x坐标(例如 col1)
-
y:y坐标(例如 col2)
-
data:具有相应列名称的数据框
-
xlim, ylim:坐标轴的范围,例如 xlim=c(0,10)
-
log:进行对数变换,例如 log=“x”或log=“xy”
-
main:图形的主题,另外,通过?plotmath可以查看数学公式的使用
-
xlab, ylab:x轴和y轴的标签
-
color,shape,size:颜色,形状,大小的调整
ggplot 函数主要接受两个参数,1.数据集;2.aes功能提供的图形美学。其他参数(如几何对象(例如点,线,条))通过+作为分隔符附加来传递。
下面总结geom_*函数族,这个函数族用于指定对应的几何变换,也就是用于指定绘制何种图形。
-
geom_abline() geom_hline() geom_vline():参考线:水平,垂直和对角线
-
geom_bar() geom_col() stat_count():条形图
-
geom_bin2d() stat_bin_2d() :2dbin的热图计数图
-
geom_blank() :绘制空白图形
-
geom_boxplot() stat_boxplot() :绘制箱线图
-
geom_density() stat_density() :密度图
-
geom_density_2d() stat_density_2d() :二维密度图
-
geom_dotplot() :绘制点图
-
geom_hex() stat_bin_hex() :2d bin的六角形热图计数图
-
geom_freqpoly() geom_histogram() stat_bin() :直方图和频率图
-
geom_jitter() :抖动点图
-
geom_path() geom_line() geom_step() :连线图
-
geom_point() :点图
-
geom_polygon() :多边形图
-
geom_qq_line() stat_qq_line() geom_qq() stat_qq() :QQ图
-
geom_quantile() stat_quantile() :分位数回归图
-
geom_rug() :地毯图
-
geom_label() geom_text() :文本
-
geom_violin() stat_ydensity() :小提琴图
下面介绍如何快速的绘制常用的图形,以帮助我们尽可能快的了解数据。
一、散点图
散点图是非常常用的一种图形。创建散点图的方式非常的简单,使用qplot函数进行创建,指定两个参数,x轴的数据和y轴的数据,散点图如图1所示。
图1 散点图
上面的代码中使用qplot快速的绘制出了一幅散点图。在代码中首先创建了三个向量,x,y,cat.这三个向量。使用qplot绘制出了x和y的散点图。因为是要绘制散点图,因此qplot函数中,geom参数的值指定为“point”。接下来会绘制分组的散点图。
接下来调整散点图的点的颜色和大小,在这里添加连两个新的参数shape和color,用于调整散点图不同点的形状和颜色,如图2所示。
图2 调整大小和形状散点图
上面的代码绘制了分组的散点图,将不同组的数据通过点的形状和颜色区分开来。这里本质上是是绘制了一个四维图形。使用颜色和形状来表示一个新的维度,cat。
上面使用了qplot进行绘制散点图,qplot的使用方式和R基础函数plot非常的相似,使用这个函数能够使用最少的代码来绘制出想要的图形,如果需要对于图形更多的调整,则最好使用ggplot函数来进行绘图。接下来使用ggplot来绘制图形,如图3所示。
图3 散点图
上面的代码首先对于ggplot2包中的数据集diamonds进行取了子集,因为原本的整个数据集比较的大。使用sample_frac函数选取了原始数据集的30%的数据进行绘图。这里使用ggplot函数绘制了一幅分组的散点图,x轴表示carat变量,y轴表示price变量,颜色通过color变量表示。在ggplot函数中,首先设置好了数据集dsmall,然后定义数据的映射关系,通过aes函数设定了x= carat, y = price, color=color。最后使用geom_point函数指明绘制一个散点图,通过size参数指定数据集点的大小。
二、折线图
将散点图的点连接起来的图形就是折线图。折线图与散点图表达的信息非常的类似,都是描述两个变量之间的关系。下面使用R的基础函数plot函数来绘制折线图,如图4所示。
图4 折线图
上面的代码使用了plot函数来绘制一个线图,使用的数据集是pressure数据集,数据集中有两个变量,分别为:“temperature”、“pressure” 。这两个变量分别为x轴和y轴。plot函数中type用于指定绘制什么种类的图形,type =‘l’表示绘制的是线图。如果type = ’p’,则表示绘制的是散点图。下面绘制多条线图,如图5所示。
图5 多条折线图
上面的代码绘制了两条线图,并且在线图中添加了数据点。使用plot绘制多条图形的方法是首先使用plot函数绘制好一幅图,然后使用point函数与line函数添加新的内容,使用point函数添加点,使用line函数添加线。qplot函数绘制图形的方式要比plot函数更为简单。使用qplot来绘制折线图,如图3.6所示。
图6 折线图
qplot绘制折线图的方式与之前绘制散点图的方式非常的相似,将geom参数改为‘line’,则表示绘制的图形是线图。这里设置了两种统计变换,使用c()向量将两种统计变换作为一个参数进行传递。使用ggplot函数绘制折线图与ggplot函数绘制散点图也非常的相似。接下来使用ggplot来绘制折线图,如图7所示。
图7 折线图
上面的代码中,使用了ggplot函数来绘制折线图。实现的方式是在geom_point()函数的末尾加上了geom_line。可以注意到,ggplot函数对于构建复杂图形非常的合适,因为图形的修改,添加可以通过’+’来完成为,统计图形可以一层一层的叠加。
三、绘制条形图
条形图往往被用于表示不同分类变量的数值。在基础的R中,绘制条形图使用的是barplot函数。这里使用的数据集是R自带的数据集BOD,BOD数据框架有6行2列,给出了水质评价中生物需氧量与时间的关系,下面使用R的基础绘图函数绘制了一幅条形图,如图8所示。
图8 条形图
如果数据只是一个向量,也就是没有计数的结果,则需要先使用table函数对数据集进行计数,如图9所示。
图9 条形图
上面的代码通过两种方式绘制了条形图,第一种方式是直接指定了一个向量,作为条形图的每一个值,然后通过names.arg参数指定不同条形的名称。第二种实现方式是使用一个向量的列联表来绘制条形图。使用qplot函数绘制与barplot绘制条形图有些许不同。接下来使用qplot函数来绘制条形图,如图10所示。
图 10 条形图
上面的代码使用了qplot绘制了条形图,在这里参数的指定有一个要求,就是x用于指定分类变量,y用于指定数值变量。然后设置geom=‘col’用于指定绘制的图形是条形图。使用ggplot绘制条形图同样非常的简单,接下来使用ggplot函数来绘制条形图,如图11所示。
图11 条形图
下面的代码首先将Time变量转换成为了因子类型,然后再绘制图形,这样的话与图3.11是有一些差别的。下面的代码绘制的图形,如图12所示。
图12 条形图
上面的代码使用相同的数据绘制出了两幅条形图。第一幅条形图坐标轴为6的位置没有条形,而第二幅图没有6的位置。这是因为,原始的数据中,Time这个变量是用数字表示的,而数字中没有6,这个时候6就会空出来。第二幅图中,将Time这个变量做了类型转换,转换成为了因子。这就相当于将数据变成了分类变量,而类别只包括1、2、3、4、5、7这6个类别。
总结
本章节介绍了常用图形的绘制。在这些图形的绘制过程中,并没有进行太多的细节调整,没有对参数进行改变。这样,能够尽可能快速的对现有的数据进行可视化,能够尽可能快速的了解数据。本章节是基于这样的目的。
在本章节中,介绍了ggplot2包的一些基本概念。介绍了散点图的快速绘制,介绍了折线图、条形图的快速绘制。如果,读者是想快速的对数据进行可视化展示,并且对于图形的细节并没有太多的要求,本章内容能够帮助读者快速的进行图形绘制。
本文摘自机械工业出版社出版的《R语言数据可视化实战》一书。文章略有修改,请按照出版图书为准,经出版社授权发布
书籍购买链接,如下:

👇👇👇👇👇
需要加入R语言群的朋友,可以扫描我的微信号,备注“R-入群”。我会邀请你加入R语言群,和大家一起讨论与学习。
推荐阅读:
推荐公众号:数据科学与人工智能
数据科学与人工智能公众号推广Python语言,数据科学与人工智能的知识和信息。扫码下方二维码关注我,一起学习Python语言和数据科学与人工智能。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!