R可视化之图形控制和布局基础

R语言的图形参数主要由par()函数控制,图形布局主要由layout()函数控制

图形参数

我们以如下数据为例

剂量(dose) 对药物A的响应(drugA) 对药物B的响应(drugB)
20 16 15
30 20 18
40 27 25
45 40 31
60 60 40
dose  <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)

# par()函数作用是全局的,使用par()修改过的参数除非会话结束,否则将一直保留,之后画
# 的图形将一直使用修改过的参数绘制。
opar <- par(no.readonly=TRUE)  # 保存原始的par参数
par(lty=3,pch=8)    # 设置线型线宽
plot(dose,drugA,type='b')  # 绘制图形
par(opar)  # 将参数恢复为原始参数

# type='b'  表示同时绘制点和线
# type='p'  表示只绘制点
# type='l'  表示只绘制线
# type='o'  表示绘制的线穿过点
# type='c'  表示只绘制线且空出有点的地方(实际就是b模式把点去掉)

R可视化之图形控制和布局基础_第1张图片

符号和线型线宽

参数 描述 默认值
lty 线条类型 solid(即1)
lwd 线条宽度 1
pch 设置绘图点和符号的类型 1
cex 控制文字和绘图符号的大小,cex=1表示正常大小,0.8表示正常大小的80% 1

# R中的线型和线宽
plot.new()
plot.window(xlim = c(0, 6), ylim =  c(0, 6), ann = F, asp = 1)
int <-  0:5+0.5
abline(h = int, lty = 1:6, lwd = 1:6)
text(1, int, paste(rep("lty = ", 6), 1:6, rep(", lwd = ", 6), 1:6), pos = 3)

R可视化之图形控制和布局基础_第2张图片

plot(dose,drugA,type='b',lty=3,lwd=4,pch=15,cex=3)
#绘制一幅图形,其线条类型为点线,宽度为默认宽度的4倍,点的符号为实心正方形,大小为默认符号大小的3倍

R可视化之图形控制和布局基础_第3张图片

颜色

在R中,可以通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色。举例来说,col=1、col=“white”、col="#FFFFFF"、col=rgb(1,1,1) 和 col=hsv(0,0,1) 都是表示白色的等价方式.colors()可以返回所有可用的颜色。当需要连续的颜色时,可以使用rainbow()函数来生成。

参数 描述 默认值
col 默认的绘图颜色。某些函数(如lines和pie)可以接受一个含有颜色值的向量并自动循环使用。例如,如果设定col=c(“red”, “blue”)并需要绘制三条线,则第一条线将为红色,第二条线为蓝色,第三条线又将为红色 ‘black’
col.axis 坐标轴刻度文字的颜色 ‘black’
col.lab 坐标轴标签(名称)的颜色 ‘black’
col.main 标题颜色 ‘black’
col.sub 副标题颜色 ‘black’
fg 图形的前景色 ‘black’
bg 图形的背景色 ‘white’
mycolors <- rainbow(5)   # 参数为整数,表示要生成的颜色数量
pie(rep(1,5), labels=mycolors, col=mycolors)
mygrays <- gray(0:5/5)   # 生成 5阶灰度色
pie(rep(1, 5), labels=mygrays, col=mygrays)

R可视化之图形控制和布局基础_第4张图片

R可视化之图形控制和布局基础_第5张图片

文本属性

控制字号,字体, 字样

参数 描述 默认值
cex 控制文字和绘图符号的大小,cex=1表示正常大小,0.8表示正常大小的80% 1
cex.axis 坐标轴刻度位子的缩放倍数 1
cex.lab 坐标轴标签(名称)的缩放倍数 1
cex.main 主标题文字缩放倍数 1.2
cex.sub 副标题的缩放倍数 1
font 整数。用于指定绘图使用的字体样式。1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(以Adobe符号编码表示) 1
font.axis 坐标轴刻度文字的字体样式 1
font.lab 坐标轴标签的字体 1
font.main 主标题的字体 2
font.sub 副标题的字体样式 1
ps 字体磅值(1磅约为1/72英寸).文本的最终大小为 ps*cex 12
family 绘制文本时使用的字体族。标准的取值为serif(衬线)、sans(无衬线)和mono(等宽) ‘’
plot(dose,drugA,type='b',font.lab=2, cex.lab=1.5)  # 坐标轴标签字体斜体且放大1.5倍
text(dose-1,drugA+1,drugA,cex=0.8, font=4)  # 添加文本

R可视化之图形控制和布局基础_第6张图片

图形尺寸和边界尺寸

参数 描述 默认值
pin 数值型向量c(宽,高),以英寸表示的图形尺寸 (5.4,4.8)
mai 数值型向量 c(底部,左侧,上方,右侧),设置图形边距大小,单位英寸 c(1,0.8,0.8,0.4)+0.02
mar 数值型向量 c(底部,左侧,上方,右侧),设置图形边距大小,单位英分 c(5, 4, 4, 2) + 0.1
opar <- par(no.readonly=TRUE)
par(pin=c(2, 3),mfcol=c(1,2))
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可视化之图形控制和布局基础_第7张图片

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

参数 描述 默认值
ann 控制高水平绘图函数的主标题和坐标轴标题注释,若ann=FALSE,将不显示这些注释 TRUE
side 一个整数,表示在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右)
at 一个数值型向量,表示需要绘制刻度线的位置
labels 一个字符型向量,表示置于刻度线旁边的文字标签(如果为NULL,则将直接使用at中的值
pos 坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值)
las 标签是否平行于(=0)或垂直于(=2)坐标轴 0
tck 刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在图形内侧,0表示禁用刻度,1表示绘制网格线);默认值为-0.01)
xaxt 设置x轴类型,xaxt=“n” 表示没有坐标轴,取其它值都会画出坐标轴 s
yaxt 设置y轴类型,同上 s
plot(dose, drugA, type="b",  
     col="red", lty=2, pch=2, lwd=2,
     main="Clinical Trials for Drug A",     # 主标题
     sub="This is hypothetical data",     # 副标题
     xlab="Dosage", ylab="Drug Response",    # x,y轴标签
     xlim=c(0, 60), ylim=c(0, 70))  #  x,y轴的范围

R可视化之图形控制和布局基础_第8张图片

在高级绘图函数中,都是自带坐标轴标题等属性的。如果想自定义,就要使用ann=FALSE 来禁用坐标轴注释

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)  # 关闭坐标轴及坐标轴注释
lines(x, z, type="b", pch=22, col="blue", lty=2)  # 绘制 z线
axis(2, at=x, labels=x, col.axis="red", las=2)  # 绘制自定义x 轴
axis(4, at=z, labels=round(z, digits=2),   # 绘制自定义y轴
     col.axis="blue", las=2, cex.axis=0.7, tck=-.01)   
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可视化之图形控制和布局基础_第9张图片

# 参考线

abline(h=c(1,2,3), v=(4,5,6))
# 在y轴1,2,3处,x轴4,5,6处添加参考线
# 图例

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=加上颜色值组成的向量
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)    # 输入数据
opar <- par(no.readonly=TRUE)    # 保存原始参数
par(lwd=2, cex=1.5, font.lab=2)    # 设置线宽, 放大1.5倍, 坐标轴标签字体 粗体
plot(dose, drugA, type="b",   
     pch=15, lty=1, col="red", ylim=c(0, 60),     # 设置符号类型,线型, 颜色, y轴取值范围
     main="Drug A vs. Drug B",     # 主标题
     xlab="Drug Dosage", ylab="Drug Response")
text(dose-1, drugA+1.8, drugA, col='red',cex=0.5,font=2)    # 添加文本
text(dose, drugB-2, drugB, col='blue',cex=0.5,font=2)   # 添加文本
lines(dose, drugB, type="b",
      pch=17, lty=2, col="blue")
abline(h=c(30), lwd=1.5, lty=2, col="gray")    # 参考线
library(Hmisc)       # 载入包
minor.tick(nx=3, ny=3, tick.ratio=0.5)    # 添加次要刻度线
legend("topleft", inset=.05, title="Drug Type", c("A","B"),    # 图例
       lty=c(1, 2), pch=c(15, 17), col=c("red", "blue"))
par(opar)

R可视化之图形控制和布局基础_第10张图片

text()可向绘图区域内部添加文本,而mtext()则向图形的四个边界之一添加文本。

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

text(lacation, “text”, pos,…)
mtext(“text”, side, line=n,…)

图形布局

使用layout()函数可以很容易的绘制出不同布局的拼图。
layout(mat,widthhs=rep.int(1,ncol(mat)), height=rep.int(1,nrow(mat)), respect=FALSE)

参数 描述
mat 矩阵,描述绘图环境,比如matrix(c(1,2,3,3),nrow=2,ncol=2,byrow=TRUE)表示见绘图区域分割成2行2列,按列填充。第三张图占据整个第二行,前两张图平分第一行
widths 向量,分割区域宽度,widths=(2,1)表示绘图区宽度按照2:1划分
heights 向量,分割区域高度,heights=(3,1)表示绘图区高度按照3:1划分
# 在par()函数中使用图形参数 mfrow=c(nrows, ncols)来创建按行填充的、行数为nrows、列数为ncols的图形矩阵。
# nfcol=c(nrows, ncols)按列填充矩阵

attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))
plot(wt,mpg, main="Scatterplot of wt vs. mpg")
plot(wt,disp, main="Scatterplot of wt vs. disp")
hist(wt, main="Histogram of wt")
boxplot(wt, main="Boxplot of wt")
par(opar)
detach(mtcars)

R可视化之图形控制和布局基础_第11张图片

# layout()函数
layout(matrix(c(1,2,3,3), nrow=2, ncol=2), widths=c(2,1))  # 设置布局 2行2列 默认列填充, 第三幅图占据3,4号位,且宽度是1,2的1/2
opar <- par(no.readonly=TRUE)
par(mai=c(0.6,0.6,0.1,0.1),cex=0.7)      # 设置图形边距及缩放0.7
x <- rnorm(5000)    # 生成5000个标准正态分布的随机数
y <- rchisq(5000, 10)    # 生成5000个卡方分布的随机数
hist(x, prob=TRUE, col='lightblue',  # x 的直方图,
     xlab='x', ylab='Density',  # 设置坐标轴注释
     ylim=c(0,0.4),main="")   # 设置y轴范围,禁用主标题
hist(y, freq=FALSE, col='pink', xlab="y", ylab='Density', main="")
boxplot(x, col='red', lwd=1)
par(opar)

R可视化之图形控制和布局基础_第12张图片

attach(mtcars)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE),
       widths=c(3, 1), heights=c(1, 2))   # 第二行高度是第一行的2倍,第三幅图的宽度是第二幅图的 1/3
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)

R可视化之图形控制和布局基础_第13张图片

#  更精细的控制图形,可以使多张图组合成一张有实际意义的图形
#  利用 fig= 参数来精确的控制绘图,参数fig=的取值是一个形如c(x1, x2, y1, y2)的数值向量
#  想想绘图区域是一个宽为 1 ,高为 1 的矩形,则x1, x2, y1, y2的范围就是[0,1]
#  fig= 默认 会新建一幅图形,所以在添加一幅图到一幅现有图形上时,请设定参数new=TRUE。


opar <- par(no.readonly=TRUE)
par(fig=c(0, 0.8, 0, 0.8))    # 设置散点图范围
plot(mtcars$mpg, mtcars$wt,    #  散点图
     xlab="Miles Per Gallon",
     ylab="Car Weight")
par(fig=c(0, 0.8, 0.5, 1), new=TRUE)   # 设置上方箱线图范围,宽于散点图一致,高度范围在0.5-1,。
boxplot(mtcars$mpg, horizontal=TRUE, axes=FALSE)   # 上方添加箱线图, 禁用坐标轴
par(fig=c(0.6, 1, 0, 0.8), new=TRUE)   # 设置右边箱线图,高度与散点图一直,宽度范围在0.6-1.
boxplot(mtcars$wt, axes=FALSE)    # 右边添加箱线图,禁用坐标轴
mtext("Enhanced Scatterplot", side=3, outer=TRUE, line=-3)
par(opar)

R可视化之图形控制和布局基础_第14张图片

你可能感兴趣的:(R语言学习笔记)