欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言实战学习笔记(二)图形初阶

程序员文章站 2022-07-14 20:57:45
...

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 点的符号 指定绘制点时使用的符号 R语言实战学习笔记(二)图形初阶
cex 符号的大小 指定符号的大小。cex是一个数值,表示绘图符号相对于默认大小的缩放倍数。默认大小为1,1.5表示放大为默认值的1.5倍,0.5表示缩小为默认值的50%,等等
lty 线条类型 R语言实战学习笔记(二)图形初阶
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)

得到如下两幅图
R语言实战学习笔记(二)图形初阶
R语言实战学习笔记(二)图形初阶

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)  

得到图形
R语言实战学习笔记(二)图形初阶

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时,表示每组图例水平排列。最终的效果如图所示。
R语言实战学习笔记(二)图形初阶

下面这段代码不再使用特定字符串来设置位置,而是直接设置位置(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。最后的效果如图所示。
R语言实战学习笔记(二)图形初阶

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=完成这个任务。此上添加两幅箱线图,创建了单幅的增强型图形。
R语言实战学习笔记(二)图形初阶


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)的数值向量。
R语言实战学习笔记(二)图形初阶
第一个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以拉近右侧箱线图和散点图的距离。你需要不断尝试找到合适的位置参数。

相关标签: R语言入门