主要内容:
图形的创建与保存;
自定义符号、线条、颜色和坐标轴;
标注文本和标题
控制图形维度
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()这样的高级图形命令来创建一副新图形时候,通常会覆盖之前的图形。创建多个图形的方法如下:
- 在创建一幅新图形的之前打开一个新的图形窗口:
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)
边界上添加了两幅箱体线的散点图