(五)基本图形参数

统计分析与可视化是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语言实战.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容