(五)基本图形参数

统计分析与可视化是R语言最强的两个点。本节简要介绍一些R基础绘图中的参数。
R图形可设置的参数很多,大概可以分为以下几大部分:

  1. 图像的保存。不同类型的保存大致步骤相同,如保存为pdf文件pdf(filename);plot(画图过程);dev.off(),当然也可以通过rstudio里面的选项直接导出图片;
  2. 图像的全局参数设置。 图形的参数如线条、性状、坐标轴等都可以通过函数par()设置,如opar<-par(no.readonly=TRUE);par(lty=2);plot(画图过程);par(opar),参数no.readonly=TRUE可以生成一个可以修改的当前图形参数列表。。当然这些参数除了在全局函数par()中进行设置,也可以在绘图过程中进行设置。图形参数主要包括:符号、线条、颜色、文本参数、图形尺寸及边界等;
  3. 添加文本,自定义坐标轴和图例。标题和坐标轴名称主要通过title()函数进行设置,坐标轴细节(如范围、颜色、标签等)主要通过axis()函数进行设置,次坐标轴可通过Hmisc包进行设置,图例可通过legend进行设置;
  4. 文本标注。添加文本主要是通过text()mtext()函数进行设置,数学标注可使用plotmath();
  5. 图形组合。图形组合有三种设置方式:(1)par()函数通过设置mfrowmfcol将画布进行分割;(2)layout()函数也可以对画布进行分割;(3)若需要更为精细的对图形布局进行控制,则需要使用到par()中的fig参数。

下面详细的介绍这些参数。

1、图形参数

1.1 符号和线条
参数 描述
pch 点的符号
cex 指定符号大小,表示与默认的相对大小,如1.5表示为默认的1.5倍
lty 线条类型
lwd 线条宽度,同样以默认值的相对大小来表示,如2表示为默认大小的2倍

pch符号代码如下图:

pch可选参数
lty可指定的线条类型如下:
lty类型

1.2 颜色

在R中可以通过颜色名称、RGB、颜色值等多种方式来指定颜色。函数colors可返回所有可用颜色名称。此外,rainbow()heat.colors()等多种函数可以指定连续颜色。用于指定颜色的参数如下表:

参数 描述
col 默认的绘图颜色
col.axis 坐标轴刻度文字(标签)的颜色
col.lab 坐标轴名称的颜色
col.main 主标题的名称
col.sub 副标题的名称
fg 前景色
bg 背景色
1.3 文本属性

文本属性主要包括字体大小、样式等。指定文本大小参数如下表所示:

参数 描述
cex 相对于默认的放大缩小倍数
cex.axis 坐标轴刻度的放大缩小倍数
cex.lab 坐标轴名称放大缩小倍数
cex.main 图片标题放大缩小倍数
cex.sub 图片副标题放大缩小倍数

指定文字样式的参数,如par(font.lab=3, cex.lab=1.5, font.main=4, cex.main=2)

参数 描述
font 指定字体样式,1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(以Adobe 符号编码表示)
font.axis 坐标刻度标签的字体样式
font.lab 坐标轴名称的字体样式
font.main 标题的样式
font.sub 副标题的样式
ps 字体磅值,最终大小为ps*cex
family 绘制文本时使用的字体族。标准的取值为serif(衬线)、sans(无衬线)和mono(等宽)
1.4 图形尺寸与边界

使用下面的参数可以控制图形尺寸和边界大小,如par(pin=c(4, 3), mai=c(1, 0.5, 1, 0.2))

参数 描述
pin 以英寸表示图形的图形尺寸
mai 以数值向量表示的边界大小,顺序为下左右上,单位为英寸
mar 以数值向量表示边界大小,顺序为下左上右,单位为英分。默认值为c(5,4,4,2)+0.1

2、添加文本、自定义坐标轴和图例

许多高级函数(如plot、hist、boxplot等)包含了默认的设置标题和坐标轴标签,若想另行设置需在高级函数或par()中设置anno=FALSE来移除他们。

2.1 标题

使用title()函数可以对主标题、副标题、坐标轴标题进行设置,包括标题文本颜色大小等。如:

title(main='my title', sub='my subtitle', xlab='my xlab', ylab='my ylab', col.lab='blue', cex.lab=0.75)
2.2 坐标轴

使用axis()来创建自定义的坐标轴,而非R的默认坐标轴,格式为:axis(side, at=,labels=,pos=,lty=,col=,las=,tck=,...)

参数 描述
side 设置在图形哪边绘制坐标轴(1=下,2=左,3=上,4=右)
at 数值型向量,表示绘制坐标轴刻度的位置
labels 刻度线标签,默认为at中的值
pos 两坐标轴相交的位置
lty 线条类型
col 线条和刻度线颜色
las 刻度线标签平行(=0)还是垂直(=2)于坐标轴
tck 刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在图形内侧, 0表示禁用刻度, 1表示绘制网格线);默认值为-0.01

需要注意的是,创建自定义坐标轴时,应当禁用高级绘图函数自动生成的坐标轴。参数axes=FALSE将禁用全部坐标轴(包括坐标轴框架线,除非你添加了参数frame.plot=TRUE)。参数xaxt="n"yaxt="n"将分别禁用X轴或Y轴(会留下框架线,只是去除了刻度)。
若需要绘制次要刻度线,则需要用到Hmisc包的minor.tick()函数。

2.3 参考线

函数abline()可以用来为图形添加参考线。

###在y=1,2,3处设置水平参考线
abline(h=c(1,2,3))
###在x=1,2,3处设置竖直参考线
abline(v=c(1,2,3), lty=2, col=''blue)
2.4 图例

使用legend可以为我们的图形添加图例,legend(location, title, legend).

参数 描述
location 有许多方式可以指定图例的位置。你可以直接给定图例左上角的x、 y坐标,也可以执行locator(1),然后通过鼠标单击给出图例的位置,还可以使用关键字bottom、 bottomleft、left、 topleft、 top、 topright、 right、 bottomright或center放置图例。如果你使用了以上某个关键字,那么可以同时使用参数inset=指定图例向图形内侧移动的大小(以绘图区域大小的分数表示)
title 图例标题(可选)
legend 图例标签组成的字符型向量
... 其他选项。如果图例标示的是颜色不同的线条,需要指定col=加上颜色值组成的向量。如果图例标示的是符号不同的点,则需指定pch=加上符号的代码组成的向量。如果图例标示的是不同的线条宽度或线条类型,请使用lwd=或lty=加上宽度值或类型值组成的向量。要为图例创建颜色填充的盒形(常见于条形图、箱线图或饼图),需要使用参数fill=加上颜色

其他常用的图例选项包括用于指定盒子样式的bty、指定背景色的bg、指定大小的cex,以及指定文本颜色的text.col。指定horiz=TRUE将会水平放置图例,而不是垂直放置。

2.5 文本标注

图形的文本标注主要使用text()mtext()

text(location, 'text', pos, ...)
mtext('text', side, line=n, ...)
参数 描述
location 文本的位置参数。可为一对x,y坐标,也可通过指定location为locator(1)使用鼠标交互式地确定摆放位置
pos 文本相对于位置参数的方位。1=下,2=左,3=上,4=右。如果指定了pos,就可以同时指定参数offset=作为偏移量,以相对于单个字符宽度的比例表示
side 指定用来放置文本的边。 1=下, 2=左, 3=上, 4=右。你可以指定参数line=来内移或外移文本,随着值的增加,文本将外移。也可使用adj=0将文本向左下对齐,或使用adj=1右上对齐

对于数学标注,可以使用plotmath()函数。

3、图形组合

R图形组合有三种方法par(mfrow=...)layout()par(fig=...)

3.1 par(mfrow=...)

使用par()中的mfrow=c(nrows, ncols)mfcol=c(nrows, ncols)可以快速创建nrows行ncols列的图形矩阵。

opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))   #将图形分为2行2列
plot(...)  #绘制第一个图
plot(...)   #第二
plot(...)   #第三
plot(...)  #绘制最后一个图
par(opar)
3.2 layout()

函数layout()的调用形式为layout(mat),其中的mat是一个矩阵,它指定了所要组合的多个图形的所在位置。

attach(mtcars)
###将画布分为三部分,第一部分为一行,另两部分平分另一行
layout(matrix(c(1,1,2,3), 2,2, byrow=TRUE))
hist(mpg)   #第一个图独占第一行
hist(gear)  #第二个图位于第二行左半部
hist(disp)    #第三个图位于第二行右半部
detach(mtcars)

为了更精确地控制每幅图形的大小,可以有选择地在layout()函数中使用widths=和heights=两个参数。其形式为:widths = 各列宽度值组成的一个向量, heights = 各行高度值组成的一个向量。widths和heights中的向量数值都可以通过相对值指定。
layout()函数能够让我们轻松地控制最终图形中的子图数量和摆放方式,以及这些子图的相对大小。

attach(mtcars)
###同样将图分为3部分,只是第这三部分所占比例各不相同
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE), widths=c(3,1), heights=c(1,2))
hist(mpg)   # 第一个图独占一行,高度占总高度1/3(heights=c(1,2))
hist(gear)  # 第二个图在第二行左边,高度占总高度2/3, 宽度占行宽的3/4(widths=c(3,1))
hist(disp)  # 第三个图在二行右边,高度占总高度2/3, 宽度占行宽的1/4(widths=c(3,1))
detach(mtcars)
3.3 par(fig=....) 图形的精确控制

fig参数使我们能够精确的排布各个图形的位置,将各个图形进行叠加。

> opar<-par(no.readonly = T)
###设置第一幅图的位置, X和Y轴范围都为(0,0.8)
> par(fig=c(0,0.8,0,0.8))
> plot(mtcars$wt, mtcars$mpg, xlab='MPG', ylab='Weight')
### 设置第二幅图,X轴范围为(0,0.8),Y轴范围为(0.55, 1)
> par(fig=c(0,0.8,0.55, 1), new=T)   #注意这里的new参数一定要设置
> boxplot(mtcars$wt,horizontal = T,axes=F)   #axes=F, 这里将所有的箱线图的坐标轴取消了
###设置第三幅图的位置,X轴范围为(0.65, 1),Y轴范围(0,0.8)
> par(fig=c(0.65, 1, 0, 0.8), new=T)
> boxplot(mtcars$mpg,axes=F)
###在上方添加文本
> mtext("Enhanced scatterplot", side=3,outer=T,line=-3)
###添加标题,看图可以知道这时标题并非整个图的标题,而是第三幅图的标题
> title(main="hellow world!")

要理解这幅图的绘制原理,请试想完整的绘图区域:左下角坐标为(0,0),而右上角坐标为(1,1)。下图是一幅示意图。参数fig=的取值是一个形如c(x1, x2, y1, y2)的数值向量。

另外值得注意的是,各独立子图所需空间的大小可能与设备相关。如果遇了“Error in plot.new(): figure margins too large”这样的错误,尝试在整个图形的范围内修改各个子图占据的区域位置和大小。

参考:
R语言实战.

你可能感兴趣的:((五)基本图形参数)