(一)基础
R语言中的绘图设备(device)有多种,但可以分为两类,一类是绘图文件,另一类是绘图的窗口。
我们可以利用?png来查看png()函数的帮助信息,并会得到更为详细的R中支持的常用绘图文件信息,要更为全面的信息的话,可以使用?device。这里说一下,在R中我们经常会使用?函数名的模式来快速打开关于阐述的使用信息。使用这一类函数打开的设备不会直接显示,所以运行函数后没有明显效果。但是,你已经打开了可用设备,不太明显的查看方式使用dev.list(),可以前后运行这个方法查看差异,关于dev的使用。另外一种,能让你感受到设备一打开的方式是使用x11()/windows()函数,试一下吧,这二者使用上没有区别,前者是Unix/Linux环境下的图形窗口称呼,后者当然就是windows环境下的了。
最后,R语言汇集统计计算与统计图示两种功能于一身,灵活的 面向对象(Object-Oriented,OO)编程方式让我们可以很方便地控制图形输出,从而制作出既精美又专业的统计图形。但是,R绘图的工作方式与变量,数据,函数等对象的处理形式大为不同,显然绘图结果是不能复制给一个对象的,而是直接输出到前面说的绘图设备中。
(二)布局
R绘图所占的区域,被分成两大部分,一是外围边距,一是绘图区域。
这里先简单介绍一下函数par()函数,透过它可以用来设置或者获取图形参数,par()本身(括号中不写任何参数)返回当前的图形参数设置(是一个列表:list);若要设置图形参数,则可用par(tag = value)的形式,其中tag的详细说明非常之多,可以使用?par查看,value便是参数值。
外围边距可使用par()函数中的oma来进行设置。比如oma=c(4,3,2,1),这里的oma即是:out margin area,就是指外围边距分别为下边距:4行,左边距3行,上边距2行,右边距1行,这里的行是指可以显示1行普通字体。注意,设置顺序是从x轴开始顺时针方向。当我们使用mtext中的line参数时,设置的大小就应该是[0,行数)的开区间;当我们使用mtext在外围边距上书写内容时,设置mtext中的outer=TRUE即可。
绘图区域可使用par()函数中的mfrow, mfcol来进行布局。mfrow和mfcol可以使用绘图区域被区分为多个区域。默认值为mfrow(1,1)。比如mfrow(2,3)就是指将绘图区域分成2行3列,并按行的顺序依次绘图填充;比如mfcol(3,2)就是指将绘图区域分成3行2列,并按列的顺序依次绘图填充;使用mfrow,mfcol只能是矩阵似的布局。
我们将每一个细分的绘图区域分为两个部分,一是绘图边距,一是主绘图。绘图边距用来准备坐标轴,坐标轴标签,标题。通常来讲,我们都只需要一个x轴,一个y轴,所以在设置时,一般是下边距和左边距都会大一些。如果多个x轴或者y轴,才考虑将上边距或者右边距放大一些。绘图边距可以使用par()函数中mar来设置。比如mar=c(4,3,2,1),与外围边距的设置类似,是指绘图边距分别为下边距:4行,左边距3行,上边距2行,右边距1行。这个设置顺序与前面提到的一样,也是从x轴开始顺时针方向。行的概念也与之前的相同。也可以使用mai来设置。mai与mar唯一不同之处在于mai不是以行为单位,而是以inch为单位。
这里有一个很好的例子,仔细参考以下例子,参考结果就能对上面干瘪瘪的文字有更加直观的理解O(∩_∩)O~:
SOUTH<-1; WEST<-2; NORTH<-3; EAST<-4;
GenericFigure <- function(ID, size1, size2)
{
plot(0:10, 0:10, type="n", xlab="X", ylab="Y")
text(5,5, ID, col="red", cex=size1)
box("plot", col="red")
mtext(paste("cex",size2,sep=""), SOUTH, line=3, adj=1.0, cex=size2, col="blue")
title(paste("title",ID,sep=""))
}
MultipleFigures <- function()
{
GenericFigure("1", 3, 0.5)
box("figure", lty="dotted", col="blue")
GenericFigure("2", 3, 1)
box("figure", lty="dotted", col="blue")
GenericFigure("3", 3, 1.5)
box("figure", lty="dotted", col="blue")
GenericFigure("4", 3, 2)
box("figure", lty="dotted", col="blue")
}
par(mfrow=c(2,2),mar=c(6,4,2,1),oma=c(4,3,2,1))
MultipleFigures()
box("inner", lty="dotted", col="green")
box("outer", lty="solid", col="green")
mtext("Outer Margin Area (oma) of South: 6", SOUTH, line=1, cex=1, outer=TRUE)
plotline<-function(n,direc){
for(i in 0:n){
mtext(paste("line",i,sep=""), direc, line=i, cex=1, col="black", adj=1, outer=TRUE)
}
}
plotline(4,SOUTH)



雷达卡





京公网安备 11010802022788号







