参考资料:R语言实战【第2版】
我们可以在图形上添加标题(main)、副标题(sub)、坐标轴标签(xlab、ylab)并指定标轴范围(xlim、ylim)。
# 录入数据
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',
col='red',lty=2,pch=2,lwd=2,
main='Clinical Trials for DrugA',
sub="This is hypothetical Response",
xlab='Dosage',ylab='Drug Response',
xlim=c(0,60),ylim=c(0,70))
1、标题
可是使用title()函数为图形添加标题和坐标轴标签。调用格式如下:
title(main='main title',sub='subtitle',xlab='x-axis label',ylab='y-axis label')
函数title()一般来说被用于添加信息到一个默认标题和坐标轴标签被ann=FALSE选项被移除的图形中。
函数title()中也可以指定其他图形参数(如文本大小、字体、旋转角度和颜色)。如下代码将生成红色的标题和蓝色的副标题,以及比默认大小小25%的绿色x轴、 y轴标签:
plot(dose,drugA,type='b')
title(main="My Title",col.main='red',
sub='My Subtitle',col.sub='blue',
xlab='My x label',ylab='My y label',
col.lab='green',cex.lab=0.75)
2、坐标轴
我们可以使用axis()来创建自定义的坐标轴,而非使用R中的默认坐标轴。其格式为:
axis(side,at=,labels=,pos=,lty=,col=,las=,tck=,...)
side:一个整数,表示在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右)
at:一个数值型向量,表示需要绘制刻度线的位置
labels:一个字符型向量,表示置于刻度线旁边的文字标签(如果为NULL,则直接使用at中的值)
pos:坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值)
lty:线条类型
col:线条和刻度线的颜色
las:标签是否平行于(=0)或垂直于(=2)坐标轴
tck:刻度线的长度,以相对于绘图区与大小的分数表示(负值表示在图形外侧,正值表示在图形内侧,0表示禁用刻度,1表示绘制网格线),默认值为-0.01。
自定义坐标轴时,我们应当禁用高级绘图函数自动生成的坐标轴。参数axes=FALSE将禁用全部坐标轴(包括坐标轴框架线)。参数xaxt="n"和yaxt="n"将分别禁用X轴或Y轴(会留下框架线)。
# 生成数据
x<-c(1:10)
y<-x
z<-10/x
# 参数设置
opar<-par(no.readonly=TRUE)
# 增加边界大小
par(mar=c(5,4,4,8)+0.1)
# 绘制x对y的图形
plot(x,y,type='b',
pch=2,col='red',
yaxt='n',lty=3,ann=FALSE)
# 添加x对1/x的直线
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=-0.01)
# 添加标题和文本
mtext('y=1/x',side=4,line=3,cex.lab=1,las=2,col='blue')
title('An Example of Creative Axes',
xlab="X value",
ylab='Y=X')
par(opar)
3、参考线
函数abline()可以用来为图形添加参考线。其使用格式:
abline(h=yvalues,v=xvalues)
函数abline()中也可以指定图形参数(如线条类型、颜色和宽度)。如下:
abline(h=c(1,5,7))
abline(v=seq(1,10,2),lty=2,col='blue')
4、图例
当图形中包含的数据不止一组时,图例可以帮助我们辨别每个条形、扇形区域或折线各代表哪一类数据。我们可以使用函数legend()来添加图例。其使用格式为:
legend(location,title,legend,...)
location:我们可以直接给定图例左上角的x、y坐标,也可以执行locator(1),然后通过鼠标单击给出图例的位置,还可以使用关键字bottom、bottomleft、left、topleft、top、topright、right、bottomright、或center放置图例。如果我们使用了前面的某个关键字,我们还可以同时使用参数inset=指定图例向图形内侧移动的大小(以绘图区域大小的分数表示)
titile:图例标题的字符串(可选)
legend:图例标签组成的字符型向量
其他常用的图例选项包括用于指定盒子样式的bty、指定背景色的bg、指定大小的cex,以及指定文本颜色的text.col。指定horiz=TRUE将水平放置图例。
# 录入数据
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=0.05,title='Drug Type',
c("A","B"),lty=c(1,2),pch=c(15,17),
col=c('red','blue'))
par(opar)
5、文本标注
我们可以通过函数text()和mtext()将文本添加到图形上。text()可向绘图区域内添加文本;而mtext()则向图形的四个边界之一添加文本。使用格式分别为:
text(location, "text to place", pos, ...)
mtext("text to place", side, line=n,...)
location:文本的位置参数。可以为一对x、y坐标,也可通过指定location为locator(1)使用坐标交互地确定摆放位置。
pos:文本相对于位置参数的方位。1=下,2=左,3=上,4=右。如果制定了pos,就可以同时指定参数offset=作为偏移量,以相对于单个字符宽度的比例表示。
side:指定用来放置文本的边。1=下,2=左,3=上,4=右。我们可以指定参数line=来内移或外移文本,随着值得增加,文本将外移。也可以使用adj=0将文本向左下对齐,或使用adj=1右上对齐。
# 示例1
attach(mtcars)
plot(wt,mpg,
main='Mileage vs.Weight',
xlab='Weight',ylab='Mileage',
pch=18,col='blue')
text(wt,mpg,
row.names(mtcars),
cex=0.6,pos=4,col='red')
detach(mtcars)
# 示例2
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)