R语言实战之图形初阶(三)

浏览: 1595

                                                 R语言实战之图形初阶(三)

主要内容:

图形的创建与保存;

自定义符号、线条、颜色和坐标轴;

标注文本和标题

控制图形维度

3.1使用图形

R是一个惊艳的图形构建平台,在交互会话中,可以逐条输入语句构建图形,逐渐完善图形特征。

> attach(mtcars)
> plot(wt,mpg)
> abline(lm(mpg~wt))
> title("Regression of MPG on Weight")
> detach(mtcars)

>attach(mtcars) 绑定了数据框mtcars

>plot(wt,mpg)打开了一个窗口并生成了一个散点图,横轴表示wt,车身重量,纵轴表示每加仑有行驶 的英里数。

>abline(lm(mpg~wt))向图添加了一条最优拟合曲线。

>title("Regression of MPG on Weight")添加了标题

>detach(mtcars)为数据解除数据框。

                                        


以下代码可以将图形保存到目录名为mygraph.dpf的PDF文件中:

> pdf("mygraph.pdf")
> attach(mtcars)
> plot(wt,mpg)
> abline(lm(mpg~wt))
> title("Regression of MPG on Weight")
> detach(mtcars)
> dev.off()

通常执行plot()、hist()和boxplot()这样的高级图形命令来创建一副新图形时候,通常会覆盖之前的图形。创建多个图形的方法如下:

  1. 在创建一幅新图形的之前打开一个新的图形窗口:
dev.new()
statements to create graph1
dev.new()
statements to create graph2
etc.

2.可以通过图形用户界面来查看多个图形。

在windows上,(1)打开第一个图形窗口以后,勾选 histor>recording;(2)使用菜单的previous>next 逐个查看已经绘制的图形。

3.使用dev.new() 、dev.nexr() 、 dev.pre() 、dev.set() 、dev.off()同时打开多个图形窗口,选择将哪个输出发送到哪个窗口。

我们可以指定图形的字体,颜色,坐标轴等,灵活度使得我们实现高度定制。

3。2一个简单的例子

> dose<-c(20,30,40,45,60)
> drugA<-c(16,20,27,40,60)
> drugB<-c(15,18,25,31,40)
> plot(dose,drugA,type="b")

药物A剂量响应的点线图

                                           

plot()函数是R中的一个泛型函数(它的输出将根据所绘制对象类型的不同而变化)

plot(x,y,type="b")将y置于纵轴,x横轴,绘制点集(x,y)。

type="b"表示同时绘制点和线。

3。3图形参数

通过改 图形参数 的选项来自定义一副图形的多个特征。

通过函数par()完成,格式为

par(optionname=value,optionname=name,...)

假设我们点符号使用实心三角,虚线代替实线,命令如下:

> opar<-par(no.readonly = TRUE)   #复制当前的图形参数设置
> par(lty=2,pch=17) #将默认线条改为虚线,符号改为实心三角
> plot(dose,drugA,type="b")
> par(opar)

                                       

第二种方法实现上述图形:

> plot(dose,drugA,type="b",lty=2,pch=17)

3。3。1符号与线条

指定符号和线条类型的参数

pch 绘制点的符号

cex 指定符号大小。(默认值为1)

lty 指定线条类型

lwd 指定线条宽度(默认值为1)

应用:

> plot(dose,drugA,type = "b",lty=3,lwd=3,pch=15,cex=2)

                                           

3.3.2 颜色

用于指定颜色的参数

col 默认的绘图颜色

col.axis 坐标轴刻度文字颜色

col.lab 坐标轴标签颜色

col.main 标题颜色

col.sub 副标题颜色

fg 图形前景色

bg 图形的背景色

gray(0:10/10)将生成10阶灰度色。

代码:

> n<-10
> mycolors<-rainbow(n)
> pie(rep(1,n),labels = mycolors,col=mycolors)

                                                        

> n<-10
> mygrays<-gray(0:n/n)
> pie(rep(1,n),labels = mygrays,col=mygrays)

                                          

3。3。3文本属性

图形参数同样可以用来指定字号、字体、和字样。

例如:

> par(font.lab=3,cex.lab=1.5,font.main=4,cex.main=2)

创建斜体、1.5倍于默认文本大小的坐标轴标签的名称,以及粗体斜体,2倍于默认文本大小的标题

3。3。4图形尺寸和图形边界

pin 以英寸表示图形的尺寸

mai 以数值表示边界大小(单位 )

使用之前所学的所有的选项来强化之前的简单的图形示例:

代码3-1 使用图形参数控制图形外观

> dose<-c(20,30,40,45,60)
> drugA<-c(16,20,27,40,46)
> drugB<-c(15,18,25,31,40)
> opar<-par(no.readonly = TRUE)
> par(pin=c(2,3))
> 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=23,col="blue",bg="green")
> par(opar)

                                                                    

                                                                   

3。4添加文本、自定义坐标轴和图例

除了图形参数,很多的高级绘图函数(plot、 hist 、boxplot)也允许自行设定坐标轴和文本标注选项。

以下代码添加了,标题(main),副标题(sub),坐标轴标签(xlab ylab)并指定了坐标轴范围(xlim,ylim)

> 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))

                                          

注意:

1。并非所有函数都支持这些选项,需要提前查明。

2。某些高级绘图函数已经包含了默认的标题和标签。可以通过plot()或者par()语句中添加 ann=FALSE来移除他们。

3。4。1标题

使用title()函数来为图形添加标题和坐标轴标签。

格式为:

title(main="main title",sub="sub-titles",xlab="x-axis label",ylab="y-axis label")

3。4。2坐标轴

你可以使用函数axis( )来创建自定义的坐标轴,而非使用R中的默认坐标轴,

格式:

axis(side,at=,labels=,pos=,lty=,col=,las=,tck=,...)

坐标轴选型:

side:一个整数,表示在图形的哪边绘制坐标轴

at:一个数值型向量,表示需要绘制刻度线的位置

labels:一个字符型向量,表示置于刻度线旁边的文字标签(若为NULL,则将直接使用at中的值)

pos:坐标轴线绘制位置的坐标

lty:线条类型

col:线条和刻度线颜色

las:标签是否平行(=0)或垂直于(=2)坐标轴

tck:刻度线的长度,以相对于绘制区域大小的额分数表示

代码3-2 自定义坐标轴的示例

y<-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)

axis(2,at=x,labels = x,col.axis="red",las=2)

axis(4,at=z,labels = round(z,digits = 2),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)

                                                       

lines()语句会为现有图形添加新的图形元素

metext()函数用于在图形的边界添加文本

  • 次要刻度线

创建次要刻度线,需要使用Hmisc包中的minor.tick()函数。

3。4。3参考线

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

格式:

abline(h=yvalues,v=xvalues)

函数abline()也可以指定其他图形的参数(如线条,颜色,宽度)

例如:

abline=(h=c(1,5,7))

在y为1,5,7的位置添加了水平线

3。4。4图例

函数legend()来添加图例:

格式:

legend(location,title,legend,...)

location 指定图例的位置

title 图例标题的字符串

legend 图例标签组成的字符型向量

代码3-3 依剂量对比药物A和药物B 的响应情况

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")

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)

                                      

3。4。5文本标注

函数text( )和mtext( )将文本添加到图形上,text( )可向绘图区域内部添加文本,而mtext()是向图形的四个边界之一添加文本。

格式:

text(location,"text to place",pos,...)
mtext("text to place",side,line=n,...)

location 文本的参数位置。

pos 文本相对于位置参数的方位

side 指定用来放置文本的边。

cex 调整字号

col 颜色

font 字体样式

除了能添加标注以外,text()函数也通常用来标示图形中的点。

代码示例一:

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)

                                         

代码示例二:(windows中不同字体族的示例)

opar<-par(no.readonly = TRUE)
par(cex=1.5)
plot(1:7,1:7,type = "n")
text(3,3,"Example of default text")
text(4,4,family="mono","Example of mono-spaced text")
text(5,5,family="serif","Example of serif text")
par(opar)

                                            

3。5图形的组合

创建四幅图像的代码:

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)

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

                                                       

示例二:

attach(mtcars)
opar<-par(no.readonly = TRUE)
par(mfrow=c(3,1))
hist(wt)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)

通过par(mfrow=c(3,1))组合的三幅图

                                                  

示例三:

attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)

通过函数layout()组合的三幅图形,各宽度为默认值

                                                          

示例四:

attach(mtcars)
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)

使用函数layout()组合的三幅图形,各列宽度为指定值。

                                      

  • 图形布局的精细控制

使用fig=对图形布局实现精细的控制能力

代码3-4 多幅图形布局的精细控制

opar<-par(no.readonly = TRUE)
par(fig=c(0,0.8,0,0.8)) #设置散点图
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$mpg,axes=FALSE) #在右上方添加箱线图

mtext("Enhanced Scatterplot",side = 3,outer=TRUE,line = -3)
par(opar)

边界上添加了两幅箱体线的散点图

                                                               

推荐 0
本文由 lingan 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册