《R语言实战笔记》第三章:图形初阶

3.1使用图形

如何保存图形?

# 通过代码保存图形(也可以通过图形用户界面直接另存为图片)
pdf('mygraph.pdf') # 开启目标图形设备
attach(mtcars)     # 将mtcars写入路径
plot(wt, mpg)      # 生成散点图
abline(lm(mpg~wt)) # 添加最优拟合路线
title('Regression of MPG on Weight') # 添加标题
detach(mtcars)     # 从路径中移除mtcars
dev.off()          # 关闭目标图形设备

如何创建多个图形并随时查看每一个?

# 方法一:在创建一副新图像前打开一个新的图像窗口(方法二:在图形用户界面选择“上一个”和”下一个“查看图片、方法三:略,详见书P42)
dev.new() # 创建一个新的图像窗口
statements to create graph 1
dev.new()
statements to create graph 2
etc.

3.3图形参数

如何自定义图形的多个特征(如符号、线条、颜色、字体)等?

1.方法一:通过函数par()来指定图形参数,这种方法设定的参数值除非被再次修改,否则将在会话结束前一直有效。

par(optionname=value, optionname=value, ...) # 调用函数par()的格式。不加参数的par()将返回当前图形参数设置的列表,添加参数no.readonly=TRUE将生成可以修改的当前图形参数列表
# 利用par()修改图形参数的例子
opar <- par(no.readonly=TRUE) # 复制当前的图形参数设置
par(lty=2, pch=17) # 使用实心三角符号,并用虚线连接符号
plot(dose, drugA, type='b')   # dose, drugA的定义见P43,type='b'表示同时绘制点和线
par(opar) # 还原设置

2.方法二:部分高级绘图函数中可以直接设定图形参数,但这种方法设定的参数只对这幅图形有效。

plot(dose, drugA, type='b', lty=2, pch=17) # 生成的图片与方法一相同

3.3.1符号和线条

《R语言实战笔记》第三章:图形初阶_第1张图片

pch和lty的可能值及对应的符号和线条类型见书P45。

# 绘制一幅图,其线条类型为点线(lty=3),宽度为默认宽度的3倍(lwd=3),点的符号为实心正方形(pch=15),大小为默认符号的2倍(cex=2)。 
# 这里只展示通过高等绘图函数直接设定图形参数的方法,通过par()来设置的方法此处略。
plot(dose, drugA, type='b', lty=3, lwd=3, pch=15, cex=2)

3.3.2颜色

《R语言实战笔记》第三章:图形初阶_第2张图片

在R中,可以通过颜色下标(col=1),颜色名称(col=‘white’),十六进制的颜色值(col=‘#FFFFFF’),RGB值(col=rgb(1, 1, 1)或HSV值(col=hsv(0, 0, 1))来指定颜色。

colors() # 返回所有可用颜色的名称

3.3.3文本属性

图形参数同样可以指定字号、字体和字样。
《R语言实战笔记》第三章:图形初阶_第3张图片

# 修改图形的文本属性,使之后所有图形都拥有斜体、1.5倍于默认文本大小的坐标轴标签、以及粗斜体、2倍于默认文本大小的标题
par(font.lab=3, cex.lab=1.5, font.main=4, cex.main=2)

3.3.4图形尺寸与边界尺寸

《R语言实战笔记》第三章:图形初阶_第4张图片

# 绘制一幅4英寸宽、3英寸高、上下边界为1英寸、左边界为0.5英寸、右边界为0.2英寸的图形。
par(pin=c(4,3), mai=c(1, .5, 1,.2))

3.3.5使用图形参数控制图形外观

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(pin=c(2,3)) # 图片设置为2英寸宽,3英寸高
par(lwd=2, cex=1.5) # 线条宽度设为默认的2倍,符号设为默认的1.5倍
par(cex.axis=.75, font.axis=3) # 坐标轴刻度设置为斜体、缩小为默认大小的75%
plot(dose, drugA, type='b', pch=19, lty=2, col='red') # 绘制红色实心圆圈和虚线构成的图形
plot(dose, drugA, type='b', pch=23, lty=6, col='blue', bg='green') # 绘制绿色填充的菱形以及蓝色边框和蓝色虚线构成的图形
par(opar) # 还原初始图形参数设置

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

如何自定义图形的标题、坐标轴等?

类似设置图形参数那里,设置图形的标题和坐标轴也有两种方法:1.通过title(),axis()来设置标题和坐标轴 2.某些高级绘图函数(如plot、hist、boxplot)也允许自行设定坐标轴和文本标注选项。

# 以高级绘图函数设置标题、坐标轴等为例:绘制红色边框的三角形符号和线条宽度为默认2倍的红色虚线构成图形,标题、副标题、坐标轴标签、坐标轴刻度均被设置
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', xlim=c(0,60), ylim=c(0,70))

注意:某些高级绘图函数已包含默认的标题和标签。可以通过在plot()语句或者单独的par()语句中添加ann=FALSE来移除它们。

3.4.1标题

title(main='main-title', sub='sub-title', xlab='x-axis label', ylab='y-axis label') # 调用title()函数的格式,它可以为图形添加标题和坐标轴标签
# 利用title()函数生成标题的例子:绘制有红色标题、蓝色副标题和默认大小75%的绿色x轴、y轴标签的图形
title(main='My Title', col.main='red', sub='My sub-title', col.sub='blue', xlab='My X label', ylab='My Y label', ccol.lab='green', cex.lab=0.75)

3.4.2坐标轴

《R语言实战笔记》第三章:图形初阶_第5张图片

axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, ...) # 调用axis()函数的格式,它可以创建自定义的坐标轴,而不使用R中默认的坐标轴
# 注意:创建自定义坐标轴时,应当禁用高级绘图函数自动生成的坐标轴。参数axes=FALSE将禁用全部坐标轴。参数xaxt='n'和yaxt='n'将分别禁用X轴或Y轴(留下框架线,去除刻度)。
# 利用axis()函数自定义坐标轴的示例:
x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly=TRUE)
par(mar=c(5, 4, 4, 8) + 0.1) # 将下左上右的边界分别设置为5.1,4.1,4.1,8.1英分
plot(x, y, type='b', pch=21, col='red', yaxt='n', lty=3, ann=FALSE) # 绘制x对y的点线图,采用红色21号符号,线条类型为3号,去除y轴刻度,去除默认的标题和标签。
lines(x, z, type='b', pch=22, col='blue', lty=2) # 为现有图形添加新的图形元素,绘制x对z的点线图,采用蓝色22号符号,线条类型为2号
axis(2, at=x, labels=x, col.axis='red', las=2) # 在左侧,以x向量绘制刻度线,刻度线旁的标签用x向量的数值,颜色为红色,垂直于坐标轴
axis(4, at=z, labels=round(z, digits=2), col.axis='blue', las=2, cex.axis=0.7, tck=-.01) # 在右侧,以z向量绘制刻度线,刻度线旁的标签用z向量的保留两位小数数值,颜色为蓝色,垂直于坐标轴,缩放为默认的70%,位于图形外侧
mtext('y=10/x', side=4, line=3, cex.lab=1, las=2, col='blue') # 在图形右侧添加文本‘y=1/x’,与边界的距离为3,坐标轴标签缩放为默认的100%,垂直于坐标轴,颜色为蓝色
title('An Example of Creative Axes', xlab='X values', ylab='Y=X') # 设置标题、坐标轴标签
par(opar) # 还原初始图形参数设置

次要刻度线

library(Hmisc) # 要创建次要刻度线,必须使用Hmisc包中的minor.tick()函数
# 创建次要刻度线的示例:在X轴的两条主刻度线之间添加1条次要刻度线,在Y轴的两条主刻度线之间添加2条次要刻度线,同时设置次要刻度线的长度为主刻度线的一半
minor.tick(nx=2, ny=3, tick.ratio=0.5)

3.4.3参考线

abline(h=yvalues, x=xvalues) # 调用参考线的格式,它可以
abline(h=c(1, 5, 7), lty=1) # 在y为1、5、7的位置添加水平实线
abline(v=seq(1, 10, 2), lty=2, col='blue') # 在x为1、3、5、7、9的位置添加垂直的蓝色虚线

3.4.4图例

《R语言实战笔记》第三章:图形初阶_第6张图片

legend(location, title, legend, ...) # 调用legend()函数的格式
# 利用legend()函数添加图例的示例:效果见书P55
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) # 设置线条宽度为默认的2倍,符号大小为默认的1.5倍,坐标轴标签字体为2号类型 
# 以dose和drugA绘制图形,符号为15号,线条类型为1号,颜色为红色,y轴刻度范围为0-60,标题和坐标轴标签均设置
plot(dose, drugA, type='b', pch=15, lty=1, col='red', ylim=c(0, 60), main='Drug A vs. Drug B', xlab='Drug Dosage', ylab='Drug Response')
lines(dose, drugB, type='b', pch=17, lty=2, col='blue') # 额外添加一条以dose和drugB为数据源的线,符号为17号,线条类型为2号,颜色为蓝色
abline(h=c(30), lwd=1.5, lty=2, col='gray') # 在y为30的位置添加水平灰色虚线,线条宽度为默认的1.5倍
library(Hmisc) # 导入Hmisc包
minor.tick(nx=3, ny=3, tick.ratio=0.5) # 添加次要刻度线,在X轴的两条主刻度线之间添加2条次刻度线,在X轴的两条主刻度线之间添加2条次刻度线,次要刻度线长度为主刻度线的一半
# 在左上角添加图例,同时图例向图形内侧移动0.05,图例的标题设置为“Drug Type”,图例标签为“A”和“B”,分别对应线条类型1和类型2,符号类型15和符号类型17,颜色为红色和蓝色
legend('topleft', inset=.05, title='Drug Type', c('A', 'B'), lty=c(1, 2), pch=c(15, 17), col=c('red', 'blue'))
par(opar)

3.4.5文本标注

《R语言实战笔记》第三章:图形初阶_第7张图片

text(location, 'text to place', pos, ...) # 调用text()的一般格式:可向绘图区域内部添加文本,也可以标示图形中的点
mtext('text to place', side, line=n, ...) # 调用mtext()的一般格式:可向图形的四个边界之一添加文本
# 利用text()函数标示图形中的点
attach(mtcars)
plot(wt, mpg, main='Mileage vs. Car Weight', xlab='Weight', ylab='Mileage', pch=18, col='blue') # 以wt和mpg绘制点线图,标题和坐标轴标签已设置,符号类型为18号,符号用蓝色填充
text(wt, mpg, row.names(mtcars), cex=0.6, pos=4, col='red') # 为wt和mpg对应元素组成的坐标对标示文本,字号为默认大小的60%,文本出现在符号右侧,颜色为红色
detach(mtcars)

数学标注

参阅help(plotmath)获得更多细节和示例。

3.5图形的组合

如何将多幅图组合成一幅总括图形?

1.方法一:利用par()函数的图形参数mfrow=c(nrows, ncols)可创建按行填充、行数为nrows、列数位ncols的图形矩阵。图形参数nfcol=c(nrows, ncols)可创建按列填充、行数为nrows、列数位ncols的图形矩阵。

# 利用par()函数的mfrow图形参数创建按行填充的2*2的图形矩阵
attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2, 2)) # 创建按行填充的2*2图形矩阵
plot(wt, mpg, main='Scatterplot of wt vs. mpg')   # 以wt和mpg绘制散点图
plot(wt, disp, main='Scatterplot of wt vs. disp') # 以wt和disp绘制散点图
hist(wt, main='Histogram of wt')                  # 以wt绘制直方图
boxplot(wt, main='Boxplot of wt')                 # 以wt绘制箱形图
par(opar)
detach(mtcars)
# 注意:高级绘图函数hist()包含一个默认的标题(使用main=''可以禁用它,或使用ann=FALSE禁用所有标题和标签)。

2.方法二:利用layout()函数指定要组合的多个图形的位置。

layout(mat, widths = rep.int(1, ncol(mat)), heights = rep.int(1, nrow(mat)), respect = FALSE) # 调用layout()的一般格式
# mat参数提供做图顺序和图形版面的安排,矩阵元素0表示空缺,不绘制图形,大于0的数表示该数对应的图片占位
# widths参数=各列宽度值组成的一个向量,相对宽度可以直接用数值指定,绝对宽度(以厘米为单位)可通过函数lcm()指定
# heights参数=各行高度值组成的一个向量
# 利用layout()函数组合多幅图的示例:
attach(mtcars)
# 划分2*2区域,第一行的两个区域被图形1占据,第二行的两个区域分别被图形2和3占据,第一行图形高度时第二行的三分之一,右下角图形宽度是左下角图形宽度的四分之一
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE), widths=c(3,1), heights=c(1,2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)

3.方法三:利用par()函数的图形参数fig=c()可以排布或叠加若干图形到单幅图形上

# 利用par()函数叠加若干图形到单幅图形的示例:
opar <- par(no.readonly=TRUE)
par(fig = c(0, 0.8, 0, 0.8)) # 绘图区域占据横向范围0~0.8,纵向0~0.8
plot(mtcars$wt, mtcars$mpg, xlab='Miles Per Gallon', ylab='Car Weight') # 以wt和mpg绘制散点图
par(fig = c(0, 0.8, 0.55, 1), new=TRUE) # 绘图区域占据横向范围0~0.8,纵向0.55~1
boxplot(mtcars$wt, horizontal=TRUE, axes=FALSE) # 以wt绘制水平方向的箱形图,并禁用全部坐标轴
par(fig = c(0.65, 1, 0, 0.8), new=TRUE) # 绘图区域占据横向范围0.65~1,纵向0~0.8
boxplot(mtcars$mpg, axes=FALSE)         # 以mpg绘制垂直方向的箱形图,并禁用全部坐标轴
mtext('Enhanced Scatterplot', side=3, out=TRUE, line=-3) # 在图形上侧添加文本'Enhanced Scatterplot',与外边界(整个图片的边界)的距离为-3
par(opar)
# 注意:如果mtext不是用out=TRUE,会将文本添加到第三幅图(箱形图)的边界内

本章细节:

1.在R中,对象是指可以赋值给变量的任何事物,包括常量、数据结构、函数、图形。

你可能感兴趣的:(R语言,r语言)