R语言实战(3) ——图形初阶

 言归正传,在本章中,我们将讨论处理图形的一般方法。首先是创建和保存图形,然后是学会修改那些存在于所有图形中的特征,包括图形的标题、坐标轴、标签、颜色、线条等等。重点是那些可以应用于所有图形的通用方法。最后,我们将研究组合多幅图形为单幅图形的各种方法。
 

3.1 创建和保存图形

如图3-1

attach(mtcars) #绑定mtcars数据plot(wt, mpg) #生成了一幅散点图abline(lm(mpg~wt) ) #添加了一条最优拟合曲线title("Regression of MPG on Weight"#添加了标题detach(mtcars) #解除数据绑定

3-1 创建图形

保存图形,将绘图语句夹在开启目标图形设备的语句pdf(“mygraph. pdf”)和关闭目标图形设备的语句dev.off()之间就可以保存图形

pdf("mygraph. pdf") #函数win. metafile() 、 png() 、 j peg() 、 bmp() 、tiff() 、 xfig() 和postscri pt() 也可以将图形保存为其他格式attach(mtcars)#绑定mtcars数据plot(wt, mpg) #生成了一幅散点图abline(lm(mpg~wt) ) #添加了一条最优拟合曲线title("Regression of MPG on Weight"#添加了标题detach(mtcars) #解除数据绑定dev.off()

 

3.2 自定义图形参数( 符号、 线条、 颜色、 文本属性、 图片尺寸)

下面以一个描述病人对两种药物五个剂量水平上的响应情况的例子说明:

3-1  病人对两种药物五个剂量水平上的响应情况

dose <- c(20, 30, 40, 45, 60) #创建剂量变量drugA <- c(16, 20, 27, 40, 60) #创建药物A在不同剂量下的响应水平drugB <- c(15, 18, 25, 31, 40) #创建药物B在不同剂量下的响应水平plot(dose, drugA, type="b") #描述药物A的剂量和响应关系的折线图函数, 选项type="b"表示同时绘制点和线。如图3-2

3-2 药物A剂量和响应的折线图

 

opar <- par(no. readonly=TRUE) #函数par()来自定义一幅图形的多个特征, 添加参数no. readonly=TRUE可以生成一个可以修改的当前图形参数列表。par(lty=2, pch=17) #默认的线条类型修改为虚线,点符号改为了实心三角plot(dose, drugA, type="b") #绘制了图形,如图3-3par(opar) #还原了原始设置

 

3-3 药物A剂量和响应的折线图。修改了线条类型和点的符号

关于图形参数(符号、线条、颜色、文本大小、图形尺寸)的符号

 

总结以上参数,使用以下代码对药物A和药物B剂量与响应的折线图进行图形参数控制如图3-4所示:

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函数修改了默认的图形参数,通过par() 设定的参数对两幅图都有效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)#还原了初始的图形参数设置

3-4 药物A和药物B剂量与响应的折线图

 

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

 

举个例子,以下代码添加了标题(main) 、 副标题( sub) 、 坐标轴标签(xlab、 ylab) 并指定了坐标轴范围(xlim、 ylim),如图3-5

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",xli m=c(0, 60) , yli m=c(0, 70) ) #表示的是4英寸宽、 3英寸高、 上下边界为1英寸、 左边界为0. 5英寸、 右边界为0. 2英寸的图形代码设置了图形的颜色、 线条、 符号、 标题和副标题还有坐标轴的范围

3-5 药物A剂量和响应的折线图。添加了标题、副标题和自定义的坐标轴

 

1、自定义标题:
函数:title(main=”main title”, sub=”subtitle”, xlab=”x­axis label”, ylab=”y­axis label”)


2、自定义坐标轴:
函数:axis( side, at=, labels=, pos=, lty=, col=, las=, tck=, …)

 

 

3、 自定义参考线:
函数:abline(h=y values, v=x values) # h指的是水平实线, v是垂直实线, 也可以指定其他图形参数( 如线条类型、 颜色和宽度

abline(v=seq(1, 10, 2) , lty=2, col="blue")#表示的是4英寸宽、 3英寸高、 上下边界为1英寸、 左边界为0. 5英寸、 右边界为0. 2英寸的图形x为1 、 3、 5、 7、 9的位置添加了垂直的蓝色虚线


4、 自定义图例
函数:legend( location, title, legend, …)
location 可以是 bottom、 bottomleft、 left、 topleft、 top、 topright、 right、 bottomright 或center;

 

对药物数据作图的一个例子,依剂量对比药物A和药物B的响应情况,如图3-6

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)#增加线条、文本、符号、标签的宽度或大小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")abline(h=c(30), lwd=1.5, lty=2, col="gray")
legend("topleft", inset=. 05, title="Drug Type", c("A", "B") lty=c(1, 2) , pch=c(15, 17) , col=c("red", "blue") )#表示的是4英寸宽、 3英寸高、 上下边界为1英寸、 左边界为0. 5英寸、 右边界为0. 2英寸的图形图例设置在左上角, 标题、颜色和分组都已经设置好 par(opar)

3-6 进行标注后的图形,对比了药物A和药物B的效果

 

5、 给图形添加文本
第一种:text( location,” text to place”, pos, …) 可向绘图区域内部添加
# locator(1) 使用鼠标交互式地确定摆放位置
# pos 文本相对于位置参数的方位。1=下, 2=左, 3=上, 4=右
# side 指定用来放置文本的边。1=下, 2=左, 3=上, 4=右
# cex、col和font(分别用来调整字号、 颜色和字体样式)

 

下面给出了一个示例,结果如图3-7所示

attach(mtcars)plot(wt, mpg, main="Mileage vs. Car Weight",xlab="Weight", ylab="Mileage",pch=18, col="blue")text(wt, mpg,row.names(mtcars),cex=0.6, pos=4, col="red")detach(mtcars)

3-7  一幅散点图(车重与每加仑汽油行驶英里数)的示例,各点均添加了标签
(车型)

 

第二种:mtext(” text to place”, side, line=n, …) #向图形的四个边界之一添加文本
6、 图 形 添 加 数 学 符 号 和 公 式
help(plotmath) 以获得更多细节和示例

 

3.4 组合多个图形, par() 或layout()

 

在R中使用函数par() 或layout() 可以容易地组合多幅图形为一幅总括图形,par() 函数中mfrow=c( nrows, ncols) 来创建按行填充的、 行数为nrows、 列数为ncols的图形矩阵,mfcol=c( nrows, ncols) 按列填充矩阵。

 

举例来说,以下代码创建了四幅图形并将其排布在两行两列中,如图3-8

attach(mtcars)#引用了mtcars的数据opar <- par(no.readonly=TRUE)par(mfrow=c(2, 2) ) #按照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)

3-8 通过par(mfrow=c(2,2)) 组合的四幅图形

函数layout() 的调用形式为layout( mat) , 其中的mat是一个矩阵,它指定了所要组合的
多个图形的所在位置。在以下代码中,一幅图被置于第1行,另两幅图则被置于第2行,结果如图3-9所示:

attach(mtcars)layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))#第一幅图占了的第一行的1和2列(1,1),第二幅图占了第二行的第一列,hist(wt)hist(mpg)hist(disp)detach(mtcars)

3-9 使用函数layout() 组合的三幅图形,各列宽度为默认值

注意:layout的mat正确解读,

举例来看。matrix(c(1,1,2,3), 2, 2, byrow = TRUE)有4个元素,具有这样的形式:

       [,1] [,2] 

[1,]    1    1   

[2,]    2    3    

指的是figure1占据了第一行的2个格子,第二行的前1个格子属于figure2,figure3在第二行的最后一个格子。
使用widths= 和heights=两个参数更精确地控制图形参数。
layout(matrix(c(1123) , 22, byrow = TRUE) , widths=c(31) , heights=c(12) )#将一幅图形置于第1 行, 两幅图形置于第2行。但第1 行中图形的高度是第2行中图形高度的二分之一。除此之外, 右下角图形的宽度是左下角图形宽度的三分之一

 

3.4.1 图形布局的精细控制

使用图形参数fig=对多幅图形布局的精细控制,参数fig=的取值是一个形如c(x1 , x2, y1 , y2) 的数值向量, fig=默认会新建一幅图形, 所以在添加一幅图到一幅现有图形上时, 请设定参数new=TRUE。

 

例子如下,如图3-10所示:

opar <- par(no.readonly=TRUE)#设置当前参数par(fig=c(0, 0.8, 0, 0.8)) #设置散点图plot的范围plot(mtcars$wt, mtcars$mpg,     xlab="Miles Per Gallon",     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)#第二个箱式图mtext("Enhanced Scatterplot", side=3, outer=TRUE, line=-3)#添加文本信息par(opar) #还原当前默认值

3-10 边界上添加了两幅箱线图的散点图

小结:本章中,我们初步学会了创建图形和以各种格式保存图形的方法。也学会了如何修改一幅图形的坐标轴、字体、绘图符号、线条和颜色,以及如何添加标题、副标题、标签、文本、图例,如何指定图形和边界的大小,以及将多幅图形组合为实用的单幅图形。下一章,我们将关注如何将数据转换或修改为更有助于分析的形式。

生物信息学

R语言实战(2)——创建数据集(学习分享)

2019-12-1 14:40:02

生物信息学

R语言实战(5)——高级数据管理

2019-12-1 15:11:40

声明 本网站部分文章源于互联网,出于传递更多信息和学习之目的转载,并不保证内容正确或赞同其观点。
如转载稿涉及失效、版权等问题,请立即联系管理员;我们会予以修改、删除相关文章,请留言反馈
Notice: When your legal rights are being violated, please send an email to: [email protected]
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索