“R绘图——摘抄:R for beginners”
管理绘图
打开多个绘图设备
当绘图函数开始执行,如果没有打开绘图设备,那么R将打开一个绘图窗口来展示这个图形。绘图设备可以用适当的函数打开。可用的绘图设备种类取决于操作系统,在Unix/Linux 下,绘图窗口称为x11,而在Windows下称为windows。在所有情况下,都可以用命令x11()来打开一个绘图窗口,在Windows下仍然有效是因为上面的命令可以作为windows()的别名。可以用函数打开一个文件作为绘图设备,这包括:postscript(), pdf(), png(),. . . 可用的绘图设备列表可以用?device来察看。最后打开的设备将成为当前的绘图设备,随后的所有图形都在这上面显示。函数dev.list() 显示打开的列表。
x11(); x11(); pdf()
dev.list()
X11 X11 pdf
2 3 4
显示的数字是设备的编号,要改变当前设备必须使用这些编号,为了解当前设备用:
dev.cur()
pdf
4
为改变当前的设备:
dev.set(3)
X11
3
函数dev.off()关闭一个设备:默认关闭当前设备,否则关闭有自变量指定编号的设备。R然后显示新的当前设备编号。
dev.off(2)
X11
3
dev.off()
pdf
4
在R的Widows版本中,有两个特殊的功能值得提及:Windows Metafile.设备可以用函数win.metafile来打开,选定绘图窗口会出现\History”菜单,我们可以利用这个菜单中的功能记录一个会话中所作的所有图形(在缺省状态下,记录系统是关闭的,用户可以点击这个菜单下的\Recording”打开它)。
图形的分割
函数split.screen分割当前的绘图设备,例如:split.screen(c(1, 2))
划分设备为两部分,可以用screen(1)或者screen(2)选择;erase.screen()删除最后绘制的图形。设备的一部分也可以被split.screen() 划分,可以作出复杂的布局。这些函数和其他的函数是不兼容的(比如layout()或者coplot()),不可以用于多个绘图设备。它们的使用应局限于象图形式探索性数据分析这样的问题。
函数layout把当前的图形窗口分割为多个部份,图形将一次显示在各部分中。它主要的自变量是一个元素都是整数值的矩阵,元素指示子窗口(”sub-windows”)的编号。例如,把设备划分为4个相等的部分:layout(matrix(1:4, 2, 2))
当然也可以先产生这个矩阵,以更好的显现设备是如何划分的:
mat <- matrix(1:4, 2, 2)
mat
[,1] [,2]
[1,] 1 3
[2,] 2 4
layout(mat)
为了看到创建的分割,我们可以使用函数layout.show,其自变量是子窗口的个数(这里是4)。在这个例子中,我们有:layout.show(4)
在下面的例子里,我们将看到layout()提供的各种可能性:
layout(matrix(1:6, 3, 2))
layout.show(6)
layout(matrix(1:6, 2, 3))
layout.show(6)
m <- matrix(c(1:3, 3), 2, 2)
layout(m)
layout.show(3)
在以上各个例子中,我们没有用matrix()的选项byrow,子窗口按列编号;我们可以指定matrix(…, byrow=TRUE),则窗口将按行编号。在矩阵中的编号可以用任何次序,例如matrix(c(2, 1, 4, 3), 2,2)。
缺省情况下,layout()用等间隔分配子窗口:可以用选项widths 和heights修改分割的宽和高。这些尺寸是相对给定的(也可以用厘米,详见?layout),例如:
m <- matrix(1:4, 2, 2)
layout(m, widths=c(1, 3),
heights=c(3, 1))
layout.show(4)
m <- matrix(c(1,1,2,1),2,2)
layout(m, widths=c(2, 1),
heights=c(1, 2))
layout.show(2)
最后,矩阵里面的编号可以包括0,使得复杂的(甚至怪异的)分割成为可能。
m <- matrix(0:3, 2, 2)
layout(m, c(1, 3), c(1, 3))
layout.show(3)
m <- matrix(scan(), 5, 5)
1: 0 0 3 3 3 1 1 3 3 3
11: 0 0 3 3 3 0 2 2 0 5
21: 4 2 2 0 5
26:
Read 25 items
layout(m)
layout.show(5)