R语言最强大的一点就是画图,那个无比强大的画图系统,再加上各种各样的神级R包,让我写R语言中最喜欢的一点就是写绘图代码。

简单来说,R语言原生的绘图系统已经非常强大了,根本不需要其他东西的辅助,就可以绘制非常炫目的图片,需要的仅仅是耐心。另外R语言还有一系列的绘图辅助R包,比如著名的ggplot2,我经常用的plotly都是很好的工具。

R语言绘图基础

再大的工程也是又一块砖一块砖垒起来了。在复杂的R图也是又忒简单的元素组成的,下面的这些东西,可谓是R绘图最基本的元素,能把它们掌握,就可以绘制出相对OK的图。

颜色

之前提到过,绘图函数(比如bixplot或者plot)中的col参数就是控制颜色的,而颜色的选择可以用问题,也可以用其他的一些标号,比如网站有一个很好很强大的R颜色列表

面对上面这种浩如烟海的颜色,你可以直接把那个标号:”#XXXX”用到程序里。

另外不得不推荐一个极好的R包,叫做RColorBrewer,这个包的功能主要就是提供一些自己已经配好色的R颜色,另外提供一系列颜色的分配,绘图时运用这个包会显得颜色显眼并符合审美。

RColorBrewer::brewer.pal函数的功能是直接调用这个包已经配好的颜色,其中有一系列名字,我最喜欢用的就是”Set2”,因为看上去比较素雅。

文字

有时候做了一个图,想要在图中加一些问题,这个问题可以用text函数来解决,例如往图上边加一个”Hello World!”

让我们来细看一下text函数的参数,x代表了横坐标,我这里写的是4,就是说希望写再以第四个bar为中心的位置。y代表了高度,我写的也是4,labels就是想要写的话,可以把任何的字符串嵌进来,最后一个参数是cex,这个是控制字体大小,1是默认值,如果你希望字体放大一倍,就设置为2.

根据我的经验,想要一次性画对图还是有难度的,最好还是多尝试几次。调调位置,换换xy。慢慢就可以把图做出来。

点、线

点和线是很基础的元素,点的函数是points,线的函数是lines,要说明的是,每一次plot都会展开一副新的图。也就是说,如果你已经用过plot画了一部分图了,还想要继续往图上添加东西,就需要用points或者lines函数,不能重新用plot。

上面的代码,我plot的时候,再1到5个横坐标上,都再纵坐标为3的地方plot了一个橘色的点,做法其实和plot很像。

在plot或者point的时候,理论上你应该输入x,y两个参数,两者应该是完全对应的,一一对应,前者是横坐标,后者是纵坐标。但是如果你只输入了一批数据,程序就会默认横坐标为1,2,3,4……纵坐标是你输入的数值。这就是为什么,在这个函数里,我只输入了rep(3,5)而没有输入横坐标。

如果说是划线的话,也很简单,使用lines函数,用法和之前是一样的,如果你输入了对应的x,y坐标,就可以直接绘制,如果只输入一个vector,程序就默认横坐标是1,2,3……

后面的参数里,lwd控制线的粗细,lty控制线的类型,lty=2意思是虚线。

标题

标题其实是很容易的,只需要再plot或者其他绘图程序里,添加main参数就行:

这个真没什么好说的,cex.main=1.5的意思是,标题的尺寸是标准值的1.5倍。此外值得说的是,如果你不喜欢这个Title,也可以用text手绘,那就稍微复杂一些。

图例

图例的目的就是望你看懂你在画什么,通过legend函数我们可以添加图例。

上述就是legend函数的一堆参数,其中col,lty等等都和plot一模一样。

坐标轴

坐标轴是很容易处理的东西。直接设置参数就行了。

有一个很有意思的情况是,如果想要更换坐标轴上的1,2,3,4,5该怎么办?

构图函数

根据我几年的R语言经验,构图函数真的是一个很多教材都没有认真写的东西,但实战中经常经常经常涉及这方面问题啊,在这里我记录了一下:

首先就是,如果你想在一张图上绘制多个图形怎么办?

使用par(mfrow=c(2,3))命令可以完成比较规则的构图,其中参数中,前一个代表行,后一个代表列,我这里的意思就是,把图片分成两行三列。

还有另外一种更为厉害的分屏:

这是我曾经最喜欢的一个多图函数,其中的设置都是再layout里边的matrix,里边你可以无限多地设置函数,每一张图可以通过数字连起来,这样就可以做出各种形状的组合图形。