本章介绍处理图形的一般方法。首先,讨论如何创建和保存图形;然后研究如何修改图 形的参数,包括图形的符号、颜色、线条、标题、坐标轴、图例和文本标注等;接着研究几种基 本绘图方法,主要为散点图、折线图;最后,讨论将多幅图形组合为一幅图形的方法。 3.1 使用图形 R语言拥有强大的绘图功能,通过简单的函数调用,就可以迅速做出数据的各种图形。 下面看一个具体的绘图例子,代码如下: attach(mtcars) #mtcars 是R 语言内置数据集 plot(wt,mpg,xlab="wt/t",ylab= "mpg/miles per gallon") abline(lm(mpg~wt)) detach(mtcars) 第一句绑定数据框mtcars。第二句调用函数plot()绘制了一幅散点图,横轴表示车身 重量,纵轴表示每加仑行驶的英里数。第三句向图形添加了一条最优拟合线。最后一句解 除对数据框的绑定。程序运行结果如图3-1所示。 图3-1 创建图形 第3章 基本绘图 21 每次通过调用plot()、hist()等高级函数来创建一幅新图形时,通常现有的图形窗口都 会被新的图形覆盖。如何才能避免这种情况呢? 可以使用函数dev.new()打开一个新的图 形窗口,创建的新图形将出现在最新打开的窗口中。 图形可以通过代码或者图形用户界面来保存。使用代码保存图形,将绘图语句夹在开 启目标图形设备的语句和关闭目标设备的语句之间即可。例如,使用以下代码将图形保存 到PDF文件中: >pdf("graph1.pdf") >attach(mtcars) >plot(wt, mpg) >abline(lm(mpg~wt)) >detach(mtcars) >dev.off() 除了pdf(),还可以使用函数png()、bmp()、jpeg()、postscript()、tiff()和win.metafile() 将图形保存为其他格式。 在Windows系统中,通过图形用户界面来保存图形,在图形窗口中选择“文件”→“另存 为”命令,然后在弹出的对话框中选择想要的文件格式和保存位置即可。 3.2 图形参数 3.2.1 图形参数简介 通过修改图形参数可以自定义一幅图形的多个特征,如符号、颜色、字体、坐标轴以及图 例等,使其达到想要的效果。常用的方式是使用函数par()来修改这些选项,其调用格式为 par(optionname=value,optionname=name,…)。当par()不加参数时,将返回当前图形参 数设置的列表;添加参数par(no.readonly=TRUE)将生成一个可以修改的当前图形参数列 表。注意以这种方式设定的图形参数除非被再次修改,否则将会一直执行此参数设置,直到 会话结束。 继续3.1节中图形的例子,假设想将点的符号换成实心的方块,实线换成虚线,使用以 下代码即可完成修改: >attach(mtcars) >opar<-par(no.readonly=TRUE) >par(pch=15,lty=2) >plot(wt,mpg,xlab="wt/t",ylab= "mpg/miles per gallon") >abline(lm(mpg~wt)) >par(opar) 运行结果如图3-2所示。 首句绑定数据集mtcars。第二句将当前的图形设置保存在opar中。第三句将默认的 绘图符号改为实心小方块(pch=15),且将默认的线条类型修改为虚线(lty=2)。第四、五 R语言数据分析与22 可视化 图3-2 修改了点符号和线条类型(一) 句绘制图形,最后一句还原图形参数的原始设置。 设定图形参数还可以直接在plot()、hist()等绘图函数里添加图形参数来实现,这种情 况下,指定的选项只对这幅图本身有效。代码如下: plot(wt,mpg,pch=15) abline(lm(mpg~wt),lty=2) 生成的结果与图3-2相同。 并不是所有的绘图函数都允许指定全部可能的图形参数,可以通过查看绘图函数的帮 助(如使用命令:? plot)来确定哪些参数适用这种设置方式。下面具体介绍可以设定的图 形参数。 3.2.2 符号和线条 常用点符号和线条类型的相关参数及其描述如表3-1所示。 表3-1 常用点符号和线条类型的相关参数及其描述 参 数描 述 pch 绘制点符号的样式,如图3-3所示 cex 符号的大小,默认为1,1.5表示放大为默认值的1.5倍,0.5表示缩小为默认值的50% bg 符号的内部填充色,仅限符号21~25 lty 指定线条类型,样式如图3-4所示 lwd 线条宽度,默认宽度为1 col 指定符号边框和线条的颜色 第3章 基本绘图 23 图3-3 点符号的样式 图3-4 线条类型 综合以上参数,运行如下代码: dev.new() plot(wt,mpg,pch=22,col=2,bg=8,cex=0.8, xlab="wt/t",ylab= "mpg/miles per gallon") abline(lm(mpg~wt),lty=2,lwd=2,col=3) 首句打开一个新的图形窗口。第二句绘制散点图,点的符号为正方形,边界颜色为2, 填充色为8,大小为默认符号的80%。最后一句给图形添加直线,线条类型为虚线,宽度为 默认宽度的2倍,颜色为3。运行结果如图3-5所示。 图3-5 修改了点符号和线条类型(二) 3.2.3 颜色 使用图形参数col,除了可以设置点、线的颜色,还可以设置图像、坐标轴、文字等的颜 R语言数据分析与24 可视化 色。表3-2中列出了一些用于指定颜色的参数及其描述。 表3-2 用于指定颜色的参数及其描述 参 数描 述.参 数描 述 col 默认的绘图颜色col.sub 副标题的颜色 col.axis 坐标轴刻度文字的颜色fg 图形的前景色 col.lab 坐标轴标签(名称)的颜色bg 图形的背景色 col.main 标题的颜色 在R语言中,可以通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV 值来 确定颜色。例如: col=1、col="white"、col="#FFFFFF"、col=rgb(1,1,1)、col=hsv(0,1,1) 这5种方法均表示选定颜色为白色。其中,函数rgb()是基于红—绿—蓝生成的颜色,hsv() 是基于色相—饱和度—亮度值生成的颜色,函数的具体用法参考函数的帮助。 函数colors()可以生成657种颜色名称,可以通过这些名称,使用参数col=颜色名称 来设定想要的颜色。 例如语句: par(col="red",col.axis="blue",col.lab="black") 表示创建的所有图形颜色为红色,坐标轴刻度文字颜色为蓝色,坐标轴标签名称颜色为黑 色。具体运行结果如图3-6所示。 图3-6 修改了颜色的参数 3.2.4 文本属性 图形参数还可以指定字号、字体和字样。指定字体大小的参数及其描述如表3-3所示, 第3章 基本绘图 25 指定字样的参数及其描述如表3-4所示。 表3-3 指定字体大小的参数及其描述 参 数描 述 cex 字体大小,默认为1。1.5表示放大为默认值的1.5倍,0.5表示缩小为默认值的50% cex.axis 坐标轴刻度文字的缩放倍数,类似于cex cex.lab 坐标轴标签(名称)的缩放倍数,类似于cex cex.main 标题的缩放倍数,类似于cex cex.sub 副标题的缩放倍数,类似于cex 表3-4 指定字样的参数及其描述 参 数描 述 font 整数。用于指定绘图使用的字体样式。1=常规,2=粗体,3=斜体,4=粗斜体,5=符 号字体(以Adobe符号编码表示) font.axis 坐标轴刻度文字的字体样式 font.lab 坐标轴标签(名称)的字体样式 font.main 标题的字体样式 font.sub 副标题的字体样式 例如语句: par(font.lab=3,cex.lab=1.5,cex.axis=0.8,font.axis=2) 表示创建的所有图形的坐标轴标签(名称)字体样式为斜体、大小扩大为默认文本大小的1.5 倍,坐标轴刻度文字字体样式为粗体、大小缩小为默认文本大小的80%。具体运行结果如 图3-7所示。 图3-7 修改了字体大小和字样的参数 R语言数据分析与26 可视化 3.2.5 图形尺寸和边界尺寸 R语言中,还可以使用参数来控制图形尺寸和边界大小,具体参数及其描述如表3-5 所示。 表3-5 控制图形尺寸和边界大小的参数及其描述 参 数描 述 pin 以英寸表示的图形尺寸(宽和高) mai 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英寸 mar 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英分,默认值为c(5,4,4,2)+0.1 例如语句: par(pin=c(3,4),mai=c(1,1,1,.5)) 可以生成一幅宽为3英寸(1英寸=2.54厘米),高为4英寸,上、下边界为1英寸,左边界为 1英寸,右边界为0.5英寸的图形。下面使用这些选项来完善图形,见代码清单3-1,运行结 果如图3-8所示。 代码清单3-1 使用图形参数完善图形 >attach(mtcars) >opar<-par(no.readonly=TRUE) >par(pin=c(2,3)) >par(lwd=2,cex=0.8) >par(font.axis=3,cex.axis=0.8 >par(font.lab=2,cex.lab=1.2) >plot(wt,mpg,pch=20,col="red", +xlab="wt/t",ylab= "mpg/miles per gallon") >abline(lm(mpg~wt),lty=2) >plot(wt,disp,pch=15,col="orange", +xlab="wt/t",ylab= "disp/cubic inch") >abline(lm(disp~wt),lty=4,col="orange") >par(opar) 首先绑定数据框mtcars,然后保存了当前的图形参数设置。接着,修改了默认的图形 参数,将图形的尺寸设为2英寸宽、3英寸高。线条的宽度设为默认宽度的两倍,符号缩小 为默认大小的80%。坐标轴刻度文本样式设置为斜体、大小缩小为默认大小的80%。坐标 轴名称文本样式设置为粗体、大小扩大为默认大小的1.2倍。最后,使用红色实心圆圈和黑 色虚线创建了图3-8(a),使用橘黄色实心正方形和橘色虚线创建了图3-8(b),并还原了图 形参数的原始设置。 通过两幅图的对比发现,函数par()设定的参数对两幅图都有效,而在函数plot()和 abline()中指定的参数仅对那个特定图形有效。通过观察,发现这两幅图都缺少标题,所以 在3.3节中将介绍如何自定义标题、坐标轴等。 第3章 基本绘图 27 图3-8 每加仑行驶英里数和发动机排量随车重的回归 3.3 添加文本、自定义坐标轴和图例 除了图形参数,许多高级绘图函数,如plot()、hist()、boxplot()还可以自行设定坐标轴 和文本标注选项。例如,添加标题(main)、副标题(sub)、坐标轴标签(xlab、ylab)并指定了 坐标轴范围(xlim、ylim)等。运行以下代码,结果如图3-9所示。 main="Scatterplot of wt vs. mpg", sub="one", xlab="车重/t",ylab="每加仑行驶英里数/miles per gallon", xlim=c(0,10),ylim=c(0,50)) 图3-9 添加了标题、副标题和自定义的坐标轴 R语言数据分析与28 可视化 需要注意的是,并非所有函数都支持这些选项。详情参考相应函数的帮助,从中了解各 函数可以接受哪些选项。下面逐一介绍这些自定义选项。 3.3.1 标题 函数title()可以为图形添加标题、副标题以及坐标轴标签,语法如下: title(main="main title", sub="subtitle", xlab="x-axis label", ylab="y-axis label") 函数title()还可以指定各选项的字体、大小和颜色(font.main、cex.main、col.main、 font.sub、cex.sub、col.sub、font.lab、cex.lab、col.lab)。示例如下: title(main="My Title",col.main="red",font.main=2, sub="My Subtitle", col.sub="black", xlab="x", ylab="y",col.lab="green", cex.lab=0.8) 运行以上代码表示将生成红色且字体为粗体的标题,黑色的副标题,以及大小缩小为默认大 小的80%的绿色x轴、y轴标签。 一般来说,函数title()被用于添加信息到一个默认标题和坐标轴标签被ann=FALSE 选项移除的图形中。 3.3.2 坐标轴 axis()函数可以自定义坐标轴。其格式为 axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, ...) 坐标轴中各参数及其描述如表3-6所示。 表3-6 坐标轴中各参数及其描述 参 数描 述 side 一个整数,表示在图形的哪一侧绘制坐标轴(1=下,2=左,3=上,4=右) at 一个数值型向量,表示需要绘制刻度线的位置 labels 一个字符型向量,表示置于刻度线旁边的文字标签(如果为NULL,则将直接使用at中的值) pos 坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值) lty 线条类型 col 轴线和刻度线颜色 las 标签是否平行于(=0)或垂直于(=2)坐标轴 tck 刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在图形内 侧,0表示禁用刻度,1表示绘制网格线),默认值为-0.01 … 其他图形参数 创建自定义坐标轴时,应当禁用高级绘图函数自动生成的坐标轴。使用参数axes= FALSE将禁用全部坐标轴(包括坐标轴框架线,除非添加了参数frame.plot=TRUE)。参 第3章 基本绘图 29 数xaxt="n"和yaxt="n"将分别禁用x轴或y轴(会留下框架线,只是去除了刻度)。具体 示例见代码清单3-2。 代码清单3-2 自定义坐标轴 height<-c(155,157,160,163,166,169,172,175,179,182) weight<-c(58,59,60,61,62,63,64,65,66,67) plot(height,weight,type="b",pch=16,col="red", lty=2,xaxt="n",yaxt="n",ann=FALSE) axis(1,at=height,labels=height) axis(2,at=weight,labels=weight,las=2) title(xlab="height/cm",ylab="weight/kg") 首先输入数据,然后使用plot()函数绘制身高与体重的关系图形,接着绘制自定义的坐标 轴,最后添加标题和x、y轴标签名称。运行结果如图3-10所示。 图3-10 自定义坐标轴选项 通过观察可以发现,目前创建的图形都只拥有主刻度线,没有次刻度线。可以使用 Hmisc包中的minor.tick()函数来创建次刻度线。代码如下: install.packages("Hmisc") #安装Hmisc 包 library(Hmisc) minor.tick(nx=n, ny=n, tick.ratio=n) 其中,nx和ny分别指定了x轴和y轴每两条主刻度线之间通过次刻度线划分得到的区间 个数。tick.ratio表示次刻度线相对于主刻度线的大小比例。例如: minor.tick(nx=2, ny=3, tick.ratio=0.5) 上述语句将在x轴的每两条主刻度线之间添加1条次刻度线,并在y轴的每两条主刻度线 之间添加2条次刻度线,次刻度线的长度将是主刻度线的一半。 R语言数据分析与30 可视化 3.3.3 参考线 函数abline()可以为图形添加参考线。其使用格式为 abline(a=NULL, b=NULL, h=NULL, v=NULL, ...) 其中,a是常数项,b是斜率,h是水平线,v是垂直线。 函数abline()中也可以指定其他图形参数(如线条类型、颜色和宽度)。例如: abline(h=c(1,3,5),v=4,col="green") 表示在纵坐标为1、3、5的位置添加了水平实线,在横坐标为4的位置添加垂直实线,颜色均 为绿色。 3.3.4 图例 使用函数legend()添加图例,其使用格式如下: legend(x, y=NULL, inset=0,legend, title=NULL, title.adj=0.5, col=par("col"),lty, lwd, pch,cex=1, bty="o", bg=par("bg"), text.col=par("col"),text.font=NULL, ncol=1, horiz=FALSE, ...) 图例各选项及其描述如表3-7所示。 表3-7 图例各选项及其描述 选 项描 述 x,y 指定图例的位置。也可以执行locator(1),然后通过单击给出图例的位置,还可以使用关键 字bottom、bottomleft、left、topleft、top、topright、right、bottomright或center放置图例 inset 当图例用关键词设置位置后,使用参数inset=指定图例向图形内侧移动的大小(以绘图区 域大小的分数表示) legend 图例标签组成的字符型向量 title 图例标题的字符串 title.adj 图例标题的相对位置,0.5为默认值,表示在中间,0为最左,1为最右 col 图例中出现的点或线的颜色 lty,lwd 图例中线的类型与宽度 pch 图例中点的类型 cex 图例字符大小 bty 图例框是否画出,o为画出,默认为n不画出 bg bty!="n"时,图例的背景色 text.col 图例字体的颜色 第3章 基本绘图 31 续表 选 项描 述 text.font 图例字体的样式 ncol 图例中分类的列数 horiz 逻辑值,默认horiz=FALSE为垂直放置图例,horiz=TRUE将会水平放置图例 … 其他选项,可参考help(legend) 下面看一个添加图例的例子,见代码清单3-3,运行结果如图3-11所示。 图3-11 添加图例的图形 代码清单3-3 添加图例 age<-c(118,484,664,1004,1231,1372,1582) circumference_tree1<-c(30,58,87,115,120,142,145) circumference_tree2<-c(33,69,111,156,172,203,203) circumference_tree3<-c(30,51,75,108,115,139,140) circumference_tree4<-c(32,62,112,167,179,209,214) circumference_tree5<-c(30,49,81,125,142,174,177) opar <-par(no.readonly=TRUE) par(font.lab=2,font.axis=3,cex.axis=0.8) plot(age,circumference_tree1,type="b",pch=15,lty=1,col="red", ylim=c(0,250),xlab= "tree age/year", ylab="circumference",xaxt="n") axis(1,at=seq(0,1600,200)) lines(age,circumference_tree2,type="b",pch=16,lty=2,col="blue") lines(age,circumference_tree3,type="b",pch=17,lty=3,col="green") lines(age,circumference_tree4,type="b",pch=18,lty=4,col="orange") lines(age,circumference_tree5,type="b",pch=25,lty=5,col="pink") legend("topleft",inset=.05,title="Tree Type", R语言数据分析与32 可视化 c("tree1","tree2","tree3","tree4","tree5") , lty=c(1, 2,3,4,5), pch=c(15, 16,17,18,25), col=c("red", "blue","green", "orange","pink")) 代码中使用了函数lines(),lines()可以为一幅现有图形添加新的图形元素,运行结果 如图3-11所示。 3.3.5 文本标注 使用函数text()和mtext()向图形中添加文本。text()可以向绘图区域内部添加文本, 而mtext()则向图形的四个边界之一添加文本。使用格式分别为 text(location,"text to place", pos, ...) mtext("text to place", side, line=n, ...) 函数text()和mtext()的选项及其描述如表3-8所示。 表3-8 函数text()和mtext()的选项及其描述 选 项描 述 location 文本的位置参数。可以为一对x、y坐标,也可以通过执行locator(1),使用鼠标交互式地确 定摆放位置 pos 文本相对于位置参数的方位。1=下,2=左,3=上,4=右。如果指定了pos,就可以同时指 定参数offset=作为偏移量,以相对于单个字符宽度的比例表示 side 指定用来放置文本的边。1=下,2=左,3=上,4=右。可以指定参数line=来内移或外移文 本,随着值的增加,文本将外移,也可以使用adj=0将文本向左下对齐,或使用adj=1向右 上对齐 其他常用的选项有cex、col和font,分别用来调整字号、颜色和字体样式。 3.4 散点图 散点图通常用来描述两个连续型变量间的关系。R 语言中创建散点图的基础函数是 plot(x,y),其中,x和y是数值型向量,代表着图形中的(x,y)点。具体示例见代码清 单3-4。 代码清单3-4 绘制散点图 attach(mtcars) plot(wt,mpg,xlab="wt/t",ylab= "mpg/miles per gallon", pch=20,col="red") abline(lm(mpg~wt)) 运行结果如图3-12所示。 在代码清单3-4中,首先绑定mtcars数据框。然后创建了一幅基本的散点图,通过观 察发现,随着车重的增加,每加仑行驶英里数减少。最后使用abline()函数添加最佳拟合的 线性直线。 第3章 基本绘图 33 图3-12 汽车车重与行驶距离的散点图 函数plot()绘制的散点图一次只能观察两个变量间的二元关系,当想要查看两个以上 变量间的二元关系时,就需要将多个散点图组合在一个矩阵中,以便可以同时查看多个二元 变量关系,这就是接下来要介绍的散点图矩阵。 3.4.1 散点图矩阵 使用函数pairs()可以创建基础的散点图矩阵,其基本语法如下: pairs(formula, data, ...) 其中,formula表示成对使用的一系列变量,data表示将从中采集变量的数据集。运行 代码: pairs(~mpg+disp+wt, data=mtcars) 运行结果如图3-13所示。 从图3-13中可以看出所有指定变量间的二元相关关系。例如,mpg和disp的散点图 可以在两变量的行列交叉处找到。另外,主对角线的上方和下方的三幅散点图是相同的,可 以只展示下三角或者上三角的图形。例如,添加选项upper.panel=NULL将只生成下三角 的图形: pairs(~mpg+disp+wt, data=mtcars, upper.panel=NULL) 运行结果如图3-14所示。 3.4.2 三维散点图 散点图和散点图矩阵展示的都是二元变量关系。倘若想一次对三个定量、变量的交互 关系进行可视化,那么可以使用三维散点图。 3 4 R语言数据分析与可视化 图3-13 散点矩阵图 图3-14 仅显示下三角的散点图矩阵 第3章 基本绘图 35 可以使用scatterplot3d包中的scatterplot3d()函数来绘制三维散点图。格式如下: scatterplot3d(x, y, z) 其中,x被绘制在水平轴上,y被绘制在竖直轴上,z被绘制在透视轴上。继续前面的例子, 假设想了解汽车mpg、wt和disp间的关系,代码如下: install.packages("scatterplot3d") library(scatterplot3d) attach(mtcars) scatterplot3d(wt, disp, mpg, xlab="wt/t", ylab="mpg/miles per gallon", zlab="disp/cubic inch" 运行结果如图3-15所示。 图3-15 每加仑行驶英里数、车重和发动机排量的三维散点图 satterplot3d()函数还提供了许多选项,包括设置图形符号、轴、颜色、线条、角度等功 能,具体参见帮助函数help(satterplot3d)。 3.4.3 旋转三维散点图 R语言提供了一些旋转图形的功能,可以从多个角度观测绘制的数据点。使用rgl包 中的plot3d()函数可以创建旋转的三维散点图,通过鼠标对图形进行旋转。函数格式为 plot3d(x, y, z) 其中,x、y和z是数值型向量,代表着各个点。继续上面的例子: install.packages("rgl") library(rgl) attach(mtcars) plot3d(wt, disp, mpg, col="red", R语言数据分析与36 可视化 xlab="wt/t",ylab= "mpg/miles per gallon", zlab="disp/cubic inch") 运行结果如图3-16所示。通过鼠标旋转坐标轴,可以更清楚地了解该三维散点图。 图3-16 旋转三维散点图 3.4.4 气泡图 展示三个变量间的关系,除了使用三维散点图,还可以使用气泡图来展示。气泡图是先 创建一个二维散点图,然后第三个变量的值用点的大小来表示,值越大,气泡越大,反之, 越小。气 泡图可以使用函数symbols()来创建。该函数可以在指定的(x,y)坐标上绘制圆圈 图、方形图、星形图、温度计图和箱线图。使用格式如下: symbols(x, y=NULL, circles, squares, rectangles, stars, thermometers, boxplots, inches=TRUE, add=FALSE, fg=par("col"), bg=NA, xlab=NULL, ylab=NULL, main=NULL, xlim=NULL, ylim=NULL, ...) 详细用法参考帮助函数help(symbols)。下面继续前面的例子: attach(mtcars) symbols(wt,mpg,circles=disp,inches=0.25,bg="lightblue", xlab="wt/t",ylab="mpg/miles per gallon") 运行结果如图3-17所示。从图3-17中可以看到,随着车重的增加,每加仑行驶英里数和发 动机排量都逐渐增加,点的大小与排量成正比。 第3章 基本绘图 37 图3-17 车重与每加仑英里数的气泡图 3.5 折线图 在添加图例时,就已经绘制了一个折线图。折线图就是将散点图上的点从左到右连接 起来。折线图一般可以用函数plot()和lines()来创建,其格式如下: plot(x, y, type=) lines(x, y, type=) 其中,x和y是要连接的(x,y)点的数值型向量。参数type的可选值及其描述如表3-9 所示。 表3-9 参数type的可选值及其描述 类 型描 述 p 只有点 l 只有线 b 线连接点 c 线连接点,但不绘制点 o 圆点和线(即线覆盖在点上) h 直方图式的垂直线 S、s 阶梯线 n 不生成任何点和线,通常用来为后面的命令创建坐标轴 R语言数据分析与38 可视化 各类型图的示例如图3-18所示。可以看到,type="p"生成了典型的散点图,type="l" 生成一条直线,type="b"是最常见的折线图。type="s"和type="S"都生成阶梯线,但前 者是先横着画线,然后再上升,而后者是先上升,再横着画线。 图3-18 各类型图的示例 需要注意的是,plot()函数是在被调用时创建一幅新图,而lines()函数则是在已存在的 图形上添加信息,并不能自己生成图形。因此,lines()函数通常是在plot()函数生成一幅图 形后再被调用。 3.6 图形组合 观察图3-18可以发现其是由8幅图形组合成的一幅图形,展示了不同type参数值的折 线图形,能更清晰地展示各类折线图的特征。在R语言中,可以使用函数par()或layout() 将多幅图形组合为一幅图形。 在par()函数中使用图形参数mfrow=c(nrows,ncols)来创建按行填充的、行数为 nrows、列数为ncols的图形矩阵。另外,可以使用mfcol=c(nrows,ncols)按列填充矩阵。 举例来说,以下代码创建了两幅图形并将其排布在一行两列中: attach(mtcars) opar<-par(no.readonly=TRUE) par(mfrow=c(1,2)) plot(wt,mpg, xlab="wt/t",ylab= "mpg/miles per gallon") plot(wt,disp, xlab="wt/t",ylab= "disp/cubic inch") 第3章 基本绘图 39 par(opar) detach(mtcars) 运行结果如图3-19所示。 图3-19 通过par(mfrow=c(1,2))组合的两幅图形 第二个例子,创建三幅图形,并将其排布在三行一列中: attach(mtcars) opar <-par(no.readonly=TRUE) par(mfrow=c(3,1)) hist(wt) hist(qsec) hist(carb) par(opar) detach(mtcars) 运行结果如图3-20所示。 使用函数layout()组合图形,其使用格式为 layout(mat,widths=,heights=,byrow=) 其中,mat是一个矩阵,它指定了所要组合的多个图形的所在位置,非0数字代表绘制图形 的顺序,相同数字代表占位符,0代表空缺,不绘制图形。widths=表示各列宽度值组成的 一个向量,heights=表示各行高度值组成的一个向量,byrow=表示图形按行(TRUE)还是 按列(FALSE)排列,默认按列排放。 举例来说,绘制三行两列图像,按列排放: attach(mtcars)