这一节将介绍更多的R图形资源。首先是定制R图形的一些常用方法,主要涉及数据和模型的图形绘制。然后是如何自定义其他类型的图形或点线等元素。
A. 绘制二维图形
在R中,绘制二维图形主要有两个函数plot()和matplot()。
plot()函数主要绘制标准的x-y图形,它是基于笛卡尔坐标。这个函数会将两个向量作为参数,第一个向量作为横轴的值,第二个向量作为纵轴的值。例如:
> x=(0:100)*2*pi/100
> y=sin(x)
> plot(x,y)
如果只将一个向量做为plot()函数的参数,则该向量的值将作为y轴的值,而x轴的值由R自动产生:
> plot(y)
matplot()函数将两个矩阵作为参数。一个矩阵的列参照另一个矩阵的相应列来绘制图形。在绘制同一个图时,两个矩阵的行数应该一样。如果行数不一样,行数较少的那个矩阵用缺失值(NA)来填充。第一个矩阵的值会用在横轴上。如果其中一个矩阵只有一个列,则绘制的所有图形都将用该列的值。每一队列所绘制的图形颜色不一样,编号会用来做为不同图点的图形符号。这些选项也可由用户自己定义,例如:col=和pach=,后面会介绍这些选项。在对图形添加多个点时,matplot()函数可以省去很多麻烦,不用一一设定每个point()语句。matplot()函数可以统一设置各点的格式,并自动选择合适的坐标轴范围,使图形中包含全部数据,例如:
> y1=sin(x)
> y2=cos(x)
> y=cbind(y1,y2)
> matplot(x,y)
B. 符号、线与坐标轴风格的选项
可以使用一些选项来制定R绘制的图形。在函数plot()和matplot()中,选项通常作为附加参数被调用。可选参数能以任意顺序输入,以逗号隔开。如果省略这些参数,它们大多会采用默认值,下面将更加系统地介绍这些选项。
1
数字符号类型
绘图时对数据点所用的符号可通过pch=选项来指定(pch意思是“plotting character”)。例如pch=1表示用圆圈绘制数据点。下图就是常用的符号和对应的数值代码。
2
连接线类型
如果线是用来连接数据点或者绘制曲线,则可用lty=选项来控制它的样式。一般的线类型和对应的数值代码如下图所示。
另外,使用lty=选项和matplot()的其它选项时,可将这些选项的值组成一个向量,向量中的各元素会分别用到对应的图形上,使其具有不同的样式。例如:
> matplot(x,y,type="l",lty=c(1,2),col="black"
#Tips:我们可以看出来两个函数图分别用了线类型不同的两条线来绘制,col的设定可以保证两条线的颜色相同。
3
曲线类型
可用type=“”选项来指定不同的曲线类型。例如:type=“p”表示在绘制曲线时,只画点而不画连接线。常用的类型如下:
p:只画点的符号而不画连接线。
l:只画连接线而不画点的符号。
o:既画点的符号,又画连接线。
b:与o选项一样,只是连接线不会与点的符号接触。
h:在每个点与横轴之间画一条垂直线。
s:绘制“梯形”图,即先用水平直线,然后用竖线连接相邻点。
S:同s相似,只是水平线和垂直线顺序相反。
c:连接线里剔除掉点位置。
4
坐标轴的限制
选项xlim=和ylim=可分别用来限制横轴和纵轴的范围,例如,xlim=c(0,10)会让R只使用横轴值在0到10范围内的数据。如果数据超过此范围,就不会出现在绘制的图形中。
5
刻度线
在坐标轴上的刻度线由选项lab=和tcl=控制。lab=选项是一个向量,它有两个元素,第一个元素是横轴的刻度线数量,第二个选项是纵轴的刻度线数量。例如lab=(7,3)表示x轴被7个刻度线分成8个间隔;y轴被3个刻度线分成4个间隔。如果所指定的lab=选项不能使绘制的图形正常显示,R可能会重新用恰当的值来代替lab=选项的值。tcl=选项将一行文字的高度作为刻度线的长度。tcl的值为负数是表示刻度线在坐标轴外,为正数表示刻度线在坐标轴内。
6
坐标轴标签
在默认的情况下,横轴和纵轴的标签是绘图向量的名称。将标签通过xlab=“”和ylab=“”选项来修改,将所需的文本字符串放在引号中即可。例如:xlab=“time”,ylab=“population size”。
7
不显示坐标轴
有时图形不需要坐标轴会更好看些。不显示坐标轴的选项是axes=FALSE,不显示坐标轴标签的选项是ann=FALSE。
8
字符和标签大小可用选项cex=来修改
在默认情况下,cex指定的值为默认字符大小的倍数。cex的默认值为1。比如若cex=2,所绘制的字符为正常大小的2倍;cex=0.5,所绘制的字符是正常大小的一半。下面这些绘图选项也是通过类似的方式控制大小,即,都是参数值作为默认大小的倍数。
cex.axis= 为刻度文本大小的倍数
cex.lab= 为轴标签文本大小的倍数
cex.main=为标题文本大小的倍数
cex.sub= 为子标题文本大小的倍数
lwd= 为所画线宽度的倍数
9
字体族、字号和字样的参数
font= 用于指定绘图使用的字体样式。1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(以Adobe符号编码表示)
font.axis= 坐标轴刻度文字的字体样式
font.lab= 坐标轴标签(名称)的字体样式
font.main= 标题的字体样式
font.sub= 副标题的字体样式
ps 字体磅值(1磅约为1/72英寸)。文本的最终大小为 ps*cex
family 绘制文本时使用的字体族。标准的取值为serif(衬线)、sans(无衬线)和mono(等宽)
C. 颜色
在数据图形中颜色应该谨慎且有节制地使用。当使用颜色时,应突出重要的信息,而不能随意使用它。颜色会产生干扰,当图中的符号具有不同颜色时,眼睛会自动寻找不同颜色的含义。纯粹的装饰色彩会将人们的注意力从图形本身所要表达的信息引开。用彩色数据图形还会有一个不太重要但也不能忽略的问题:一小部分人是色盲,而这部分人的数量也不在少数。
若要在绘图函数中使用彩色,可通过下面这些选项集来实现:
col=用来指定plot()函数和 matplot()函数中数据符号和曲线的颜色,还有barplot()函数生成的条形图颜色;
col.axis=坐标轴的颜色
col.lab=坐标轴标签的颜色
col.main=主标题颜色
col.sub=副标题颜色
fg= 图形的前景色
bg= 图形的背景色
颜色可通过代码值来指定。例如col=25会得到蓝色。在控制台执行colors()函数就可知R能识别657种颜色,为了方便起见,会列出657颜色名称,这些名称能被R识别。所以,col=“blue”与col=25是一样的效果。
> colors()
[1] "white" "aliceblue" "antiquewhite"
[4] "antiquewhite1" "antiquewhite2" "antiquewhite3"
[7] "antiquewhite4" "aquamarine" "aquamarine1"
......
[652] "yellow" "yellow1" "yellow2"
[655] "yellow3" "yellow4" "yellowgreen"
当然有些时候我们需要在图形上绘制独立的点,线或者文本等,这些都不是绘图函数的参数,需要独立的函数来支撑,我们下一节就为大家来介绍这些。
参考资料:
1. 《R语言统计入门(第二版)》 人民邮电出版社 Peter Dalgaard著
2. 《R语言初学者指南》 人民邮电出版社 Brian Dennis著
3. Vicky的小笔记本《blooming for you》by Vicky