R语言系列第六期: ④R语言高级绘图(下)
点击蓝字关注我们
上一节我们重点介绍了plot()和matplot()两个绘图函数的几个重点参数,他们可以根据使用者的需要进行修改,绘制出自己需要的图形。当需要添加其他元素或者对全局进行设定的时候,我们就需要一些其他的函数来支持了。
其它定制R绘图的功能并不是绘图函数的参数,需要单独介绍。
01
添加点
通过points()函数或matpoints()函数可将附加的数据或模型添加到打开的图形中。用points()函数可将数据或模型曲线添加到有plot()函数生成的图形中,用matpoints()函数可将数据或模型曲线添加到由matplot()生成的图形中。这两个函数在绘制数据曲线的图形时,其使用方式与plot()函数和matplot()函数类似,许多参数也是完全一样。但修改存在图形的外观参数(例如:坐标轴的限制)对points()函数或matpoints()函数无效。
02
添加线
向已存在的图形添加直线时,可用lines()和matlines()函数。这两个函数都是将两个向量作为参数: 第一个向量作为x坐标的值;第二个向量作为y坐标的值,这两个向量联合在一起就可绘制一条线。可通过两个向量依次对应的点来绘制线,线的类型和风格由参数来指定。
很容易使用segment()函数来将间断(无连接)线段添加到现有图形中。另一种方法是多次调用lines()函数。segments()函数需要4个向量作为参数。前两个向量分别给出线段起始点的x坐标和y坐标,后面两个向量分别给出线段终止点的x坐标和y坐标。对segments()函数的绘图选项,可以向量的形式对其一次指定不同的绘图风格(对该函数和其他函数都可这样)。下面是一个使用segments()函数的例子:
> x0=c(2,2,3,4)
> y0=c(2,3,2,2)
> x1=c(2,3,3,4)
> y1=c(4,3,4,4)
> x=c(0,3)
> y=c(0,3)
> plot(x,y,type="l",lty=0,xlim=c(0,5),ylim=c(0,5))
> segments(x0,y0,x1,y1)
在整个图中画线可用abline()函数。此函数有如下三种形式:
abline(a,b),画一条直线,其中a是截距,b是斜率;
abline(h=),画一条水平的直线,其中y轴的值由参数h=指定;
abline(v=),画一条垂直的直线,其中x轴的值由参数v=指定。
使用abline()函数的例子:
> x=(0:100)*2*pi/100
> y=sin(x)
> plot(x,y,type="l",lty=1)
> abline(h=0,lty=2)
03
添加文本
用text()函数可将文本添加到绘图区域。而text()函数需要两个向量作为参数,这两个参数分别作为x-y坐标的值,并由此确定文本所在位置。另外还有一个字符串参数,它保存要绘制的文本。其中,pos=选项可能的取值1,2,3,4,它给出文本相对坐标点的位置。如果不指定pos=选项,文本将会叠加到中心点上。如下图所示:
> x=c(2.5,1,1,4,4)
> y=c(2.5,1,4,4,1)
> plot(x,y,type="p",xlim=c(0,5),ylim=c(0,5))
> text(x[2:5],y[2:5],c("bottom","left","top","right"),pos=1:4)
> text(x[1],y[1],c("overlay"))
指定pos=选项,pos=1为底部;pos=2为左边;pos=3为顶部;pos=4为右边,如果不指定pos的话,文字会叠加到坐标点上,两个中心相对应。
04
标题和副标题
用title()函数可以增加绘制图形的标题:
> x=c(1,2,3)
> y=c(3,3,3)
> plot(x,y)
> title(main="wow what a plot")
也可以用plot()函数(并且其他绘图函数也是一样)的main=选项参数来得到同样的效果:
> plot(x,y,main="wow what a plot")
如果这两种情形下的文本参数是一个字符串向量,就会生成一个多行标题:
> title(main=c("wow","what a plot"))
副标题是指在图形下方用sub=选项来增加文本,具体实现方法如下:
> title(main="wow what a plot",sub="and the labels rock too")
在plot()函数中,也可以使用sub=选项。调用title()函数会变得很灵活,例如,当一个标题需要应用于同时展示的多个图中时,可以用此函数。
05
图例
可以使用legend()函数来向图中增加图例。前两个参数是图例框左上方的x坐标和y坐标,接下来的参数是图例文本和出现在图例框中的绘图符号,例如:pch=和lty=。通常一种好做法是先画图,然后寻找一个恰当的空白区域来放置图例,比如:
> x=(0:100)*2*pi/100
> y1=sin(x)
> y2=cos(x)
> y=cbind(y1,y2)
> matplot(x,y,type="l",lty=c(1,2),col="black")
> legend(3,1,c("sine","cosine"),lty=c(1,2))
06
新图形窗口
用下面的R命令可以打开一个新的图形窗口:
> windows()(在windows操作系统中)
当要生成多幅图时,可将对应的一行或者多行命令放在一个脚本文件中。不然,在一次生成图的过程中,当前生成的图会替换掉前一个图。
07
全局性与局部性
当plot()函数、matplot()函数或其他绘图函数调用选项时,这些选项对调用的函数而言具有局部性。对于工作在同一会话的其他绘图函数,都会使用默认设置。即这类绘图函数更改的都是临时设定或者内部设定。Par()函数可让一系列的绘图操作共享全局参数值,例如:对所有绘图操作而言,需要更改文本大小或固定线类型。par()函数接受大多数常用的绘图函数参数。当一个参数在随后的绘图函数中发生变化时,这个变化只对该绘图函数有效。若在par()函数中指定了这个参数,则可恢复它的值。就像我们之前所接触的例子,par(mfrow=c(2,2))等。
以上就是我们对R语言绘图功能的介绍了。R语言绘图时R很重要的功能,他们可用于量化信息的可视化。我们没有从太深刻的实例着手,因为学习R最难的地方就是基本的入门知识,一旦读者对R的概念以及体系结构有了一定的感悟,就会发现一切其实很容易,并且能深入研究R中有效且宝贵的图形显示资源,这包括R自身图形资源,也包括R脚本以及全世界科学家贡献的包。
网上还有很多高端大气的R图形教程,比如统计地图,各种高端可视化图,我这里也不详细讲解了,很容易就可以检索到,感兴趣的朋友可以多交流。
参考资料:
1.《R语言统计入门(第二版)》 人民邮电出版社 Peter Dalgaard著
2.《R语言初学者指南》 人民邮电出版社 Brian Dennis著
3. Vicky的小笔记本《blooming for you》by Vicky