R语言实战学习笔记(二)图形初阶
2 图形初阶
2.1 图形参数
通过函数par()指定字体,颜色,坐标等图形参数,格式为par(optionname=value,optionname=value,…),不加参数的执行par()将生成一个含有当前参数设置的列表,添加optionname=no.readonly=TRUE可以生成一个可以修改的当前图形参数列表
> opar <- par(no.readonly = TRUE)#记录默认样式
> par(lty=2,pch=17)
> plot(x,y,type="b")
> par(opar)#恢复默认样式
以上可以得到实心三角作为符号,虚线连接点的图形。下面是各种参数的说明
参数 | 作用 | 描述 | 列表 |
---|---|---|---|
pch | 点的符号 | 指定绘制点时使用的符号 | |
cex | 符号的大小 | 指定符号的大小。cex是一个数值,表示绘图符号相对于默认大小的缩放倍数。默认大小为1,1.5表示放大为默认值的1.5倍,0.5表示缩小为默认值的50%,等等 | |
lty | 线条类型 | ||
lwd | 线条宽度 | 指定线条宽度。lwd是以默认值的相对大小来表示的(默认值为1)。例如,lwd=2将生成一条两倍于默认宽度的线条 | |
col | 默认的绘图颜色。某些函数(如lines和pie)可以接受一个含有颜色值的向量并自动循环使用。例如,如果设定col=c(“red”, “blue”)并需要绘制三条线,则第一条线将为红色,第二条线为蓝色,第三条线又将为红色 | ||
col.axis | 坐标轴刻度文字的颜色 | ||
col.lab | 坐标轴标签(名称)的颜色 | ||
col.main | 标题颜色 | ||
col.sub | 副标题颜色 | ||
fg | 图形的前景色 | ||
bg | 图形的背景色 | ||
cex | 表示相对于默认大小缩放倍数的数值。默认大小为1,1.5表示放大为默认值的1.5倍,0.5表示缩小为默认值的50%,等等 | ||
cex.axis | 坐标轴刻度文字的缩放倍数。类似于cex | ||
cex.lab | 坐标轴标签(名称)的缩放倍数。类似于cex | ||
cex.main | 标题的缩放倍数。类似于cex | ||
cex.sub | 副标题的缩放倍数。类似于cex | ||
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(等宽) | ||
pin | 以英寸表示的图形尺寸(宽和高) | ||
mai | 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英寸 | ||
mar | 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英分*。默认值为c(5, 4, 4, 2) + 0.1 |
一些例子:
> dose <- c(20,30,40,45,60)
> drugA <- c(16,20,27,40,60)
> drugB <- c(15,18,25,31,41)
> opar <- par(no.readonly = TRUE)
> par(pin=c(2,3))
> par(lwd=2,cex=1.5)
> par(cex.axis=.75,font.axis=3)
> plot(dose,drugA,type="b",pch=19,lty=2,col="red")
> plot(dose,drugB,type="b",pch=23,lty=6,col="blue",bg="green")
> par(opar)
得到如下两幅图
2.2 文本,自定义坐标轴和图例
在绘图函数plot,hist,boxplot中,可以直接在参数中添加main=“xxx”(标题),sub=”xxx“(副标题),xlab=“xxx”,ylab=“xxx”(坐标轴标签),xlim=c(0,100),ylim=c(0,100)(坐标轴范围,例从0到100)。
2.2.1 标题
title()函数,例
title(main="my title",col.main="red',
sub="my sub",col.sub="blue",
xlab="my x label,ylab="my y label",
col.lab="green",cex.lab=0.75)
若要用其他函数设置标题,则需在plot函数中,将ann=FALSE,以免两个函数会让标题,坐标标签等重复。
2.2.2 坐标轴
axis()函数,参数如下
选项 | 描述 |
---|---|
side | 一个整数,表示在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右) |
at | 一个数值型向量,表示需要绘制刻度线的位置 |
labels | 一个字符型向量,表示置于刻度线旁边的文字标签(如果为NULL,则将直接使用at中的值) |
pos | 坐标轴线绘制位置的坐标(与另一个坐标轴相交的位置的值) |
lty | 线条类型 |
col | 线条和刻度线的颜色 |
las | 标签是否平行于(=0)或者垂直于(=2)坐标轴 |
tck | 刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在图形内侧,0表示禁用刻度,1表示绘制格网线);默认值为-0.01 |
自定义坐标轴时,要禁用高级绘图函数自动生成的坐标轴,axes=FALSE禁用全部坐标轴,包括框线,参数xaxt="n"和yaxt="n"分别禁用x轴和y轴,有框线,无刻度。
x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly=TRUE)
par(mar = c(5,4,4,8)+0.1)
plot(x, y, type="b",
pch = 21, col = "red",
yaxt = "n", lty = 3, ann = FALSE) #隐藏y轴刻度和xy的标签
lines(x, z, type = "b", pch = 22, col = "blue", lty = 2) #plot为新画,lines为在现有图形上添加
axis(2, at = x, labels = x, col.axis = "red", las = 2)
axis(4, at = z, labels = round(z, digits = 2),
col.axis = "blue", las = 2, cex.axis = 0.7, tck = -0.03)
mtext("y = 1/x", side = 4, line = 3, cex.lab = 1, las = 2, col = "blue")
title("An Example of Creative Axes",
xlab = "X values",
ylab = "Y = X")
par(opar)
得到图形
2.2.3 参考线
abline(h=yvalues,v=xvalues),还可以设置线条类型,颜色,宽度等。
2.2.4 图例
legend()参数包括:
参数 | 说明 |
---|---|
location | 设置图例的位置(左上角位置)除了使用x和y参数外,也可以使用“bottomright”、“bottom”、“bottomleft”、“left”、“topleft”、“top”、“topright”、“right”、“center”参数,locator(1)可以鼠标自选位置 |
legend | 一个字符向量,表示图例中的文字 |
horiz | 为FALSE(默认)时,图例垂直排列为TRUE时,图例水平排列 |
ncol | 图例的列数目。如果horiz为true,则此项无意义 |
pch | 图例中点的样式。可以既设置pch,又设置lty,并可以设置为NA,表示某组图例无点样式。 |
lty | 图例中线的样式。可以既设置pch,又设置lty,并可以设置为NA,表示某组图例无线样式。 |
col | 图例中点/线的颜色 |
bg | 图例的背景颜色。在bty参数为“n”时无效 |
bty | 设置图例框的样式:默认为“o”,表示显示边框。设置为“n”表示无边框。 |
title | 设定图例的标题 |
下面通过几个实例进行介绍。先来看如下的代码。
text.legend=c(“上周pv”,“本周pv”,“pv同比增长”,“pv环比增长”)
col2<-c(“black”,“blue”)
legend(“topleft”,pch=c(15,15,16,16),legend=text.legend,col=c(col,col2),bty=“n”,horiz=TRUE)
上述代码用于设置图例的左上角(topleft),并通过col参数把图例中的颜色和主图形中的各组数据颜色进行对应。由于只设置了pch参数,而未设置lty参数,所以图例中的icon图标全部使用点来代替。bty为n时,图例无边框。horiz设置为TRUE时,表示每组图例水平排列。最终的效果如图所示。
下面这段代码不再使用特定字符串来设置位置,而是直接设置位置(x=1,y=500),位置仍在左上角。
legend(1,500,pch=c(15,15,NA,NA),lty=c(NA,NA,1,1),legend=text.legend,col=c(col,col2),ncol=2,bg=“aliceblue”)
其中,pch参数设置前两组图例是点样式(15),lty参数设置后两组图例是线样式(1)。ncol=2,表示4组图例排列为2列。由于没有设置bty参数,所以该图例默认没有边框。通过bg背景颜色参数设置图例颜色为aliceblue。最后的效果如图所示。
2.2.5 标注
text()向绘图区域内部添加文本,mtext()向图形四个边界之一添加文本。
text(location,“text to place”,pos,…)
mtext(“text to place”,side,line=n,…)
pos为文本相对于位置参数的方位,1,2,3,4。
2.3 图形组合
par()和layout()来对图形进行组合,如par(mfrow=c(2,2))就送创造一个两行两列的子图形,按列填充。layout(mat),mat是一个矩阵,指定所要组合的多个图形的所在位置,如layout(matrix(c(1,1,2,3),2,2,byrow=TRUE)),这句话相当于,子图形的分布为2乘2,按行填充,其中第一排第一个位置是第一个图形,第一排第二个位置还是第一个图形,第二排第一个位置是第二个图形,第二排第二个位置是第三个图形。还可以通过widths=c(3,1),heights=c(1,2)来指定,左边图形的宽度是右边图形的三倍,下面图形的高度是上面图形的两倍。
图形布局的精细控制
可能有很多时候,你想通过排布或叠加若干图形来创建单幅的、有意义的图形,这需要有对图形布局的精细控制能力。你可以使用图形参数fig=完成这个任务。此上添加两幅箱线图,创建了单幅的增强型图形。
opar<-par(no.readonly = TRUE)
par(fig=c(0,0.8,0,0.8))
plot(mtcars$wt,mtcars$mpg,xlab = "miles per callon",ylab = "Car Weight")
par(fig=c(0,0.8,0.55,1),new=TRUE)
boxplot(mtcars$wt,horizontal = TRUE,axes=FALSE)
par(fig=c(0.65,1,0,0.8),new=TRUE)
boxplot(mtcars$mpg,axes=FALSE)
要理解这幅图的绘制原理,请试想完整的绘图区域:左下角坐标为(0,0),而右上角坐标为(1,1)。参数fig=的取值是一个形如c(x1, x2, y1, y2)的数值向量。
第一个fig=将散点图设定为占据横向范围0-0.8,纵向范围0-0.8。
上方的箱线图横向占据0-0.8,纵向0.55-1。右侧的箱线图横向占据0.65-1,纵向0-0.8。fig=默认会新建一幅图形,所以在添加一幅图到一幅现有图形上时,请设定参数new=TRUE。我将参数选择为0.55而不是0.8,这样上方的图形就不会和散点图拉得太远。类似地,我选择了参数0.65以拉近右侧箱线图和散点图的距离。你需要不断尝试找到合适的位置参数。
上一篇: Struts2 Action的访问路径