R语言进阶之坐标轴和文本
许多高层次绘图函数都有可以调整坐标轴和文本的选项:
# 在plot()中指定坐标轴相关的参数
plot(x, y, main="title", sub="subtitle",
xlab="X-axis label", ylab="y-axixlabel",
xlim=c(xmin, xmax), ylim=c(ymin,ymax)
)
接下来,我将和大家简单介绍一下如何具体实现。
1. 标题
使用函数title()可以在图中添加标题,这里包括主标题、副标题、x轴标题和y轴标题,具体如下:
title(main="main title", sub="sub-title",xlab="x-axis label", ylab="y-axis label")
你也可以在title()里指定其它的绘图参数,包括文本大小、字体和颜色等等。
# 添加一个红色标题和蓝色副标题
#坐标轴标签只有默认值大小的75%并且是绿色
title(main="My Title", col.main="red",
sub="My Sub-title", col.sub="blue",
xlab="My X label", ylab="My Y label",
col.lab="green", cex.lab=0.75)
2. 文本注释
我们可以使用函数text()和mtext()来给图形添加注释文本。不过,text()是将文本放在图中,而mtext()则是将文本放在图形的边缘:
text(location, "text to place", pos, ...)
mtext("text to place", side, line=n, ...)
常见选项如下图所示:
选项 |
描述 |
location |
位置参数,可以用x轴和y轴的坐标表示 |
pos |
设置文本相对于location的位置。1代表下方, 2代表左侧,3代表上方,4代表右侧。 |
side |
函数mtext()指定图形的边缘。1代表下方, 2代表左侧,3代表上方,4代表右侧。 |
其它诸如坐标轴、字体和颜色等选项这里就不赘述了。
你也可以使用函数 text( )去给图中的点添加标签:
# 示例
attach(mtcars) # 固定数据集
plot(wt, mpg, main="Milage vs. Car Weight",xlab="Weight", ylab="Mileage", pch=18,col="blue") # 绘制车重和每英里耗油量的散点图
text(wt, mpg, row.names(mtcars), cex=0.6, pos=4, col="red") # 标记每个点代表的车型
3. 坐标轴
你可以使用函数axis()来创建自己的坐标轴,使用形式如下:
axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, ...)
选项 |
描述 |
side |
指定坐标轴的位置。1代表下方, 2代表左侧,3代表上方,4代表右侧。 |
at |
数值型向量,指定坐标轴记号的位置 |
labels |
字符型向量,指定坐标轴记号的标记内容(默认是该处对应的数值) |
pos |
指定坐标轴线的坐标位置 |
lty |
指定线条类型 |
col |
指定线条和坐标轴记号的颜色 |
las |
0代表标签和坐标轴平行,2代表标签和坐标轴垂直 |
tck |
指定坐标轴记号的长度,负值代表记号在图形外而正值代表在图形内,0代表不绘制记号,默认值是-0.01。 |
如果你想自己创建坐标轴,你需要在高层次绘图函数里设置参数axes=FALSE,这样绘图时就不会出现坐标轴信息,接下来就可以自行添加了。另外,设置 xaxt="n"和yaxt="n"可以分别不显示x轴和y轴。
# 简单示例
# 创建数据
x <- c(1:10); y <- x; z <- 10/x
# 创建图形边缘用于设置坐标轴
par(mar=c(5, 4, 4, 8) + 0.1)
# 绘制x vs y的图
plot(x, y,type="b", pch=21, col="red",
yaxt="n", lty=3, xlab="", ylab="") #不绘制y轴
# 添加线条 x vs. 1/x
lines(x, z, type="b", pch=22, col="blue", lty=2)
# 在图形左侧添加坐标轴(y轴)
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")
4. 参考线
我们可以使用abline()函数来在图形中添加直线,使用方法如下:
abline(h=yvalues, v=xvalues)
# 在y=1,5,7处添加三条水平线
abline(h=c(1,5,7))
# 在x = 1,3,5,7,9添加三条垂直
abline(v=seq(1,10,2),lty=2,col="blue")
5. 图例
我们可以使用函数legend()来给图形添加图例,用法如下:
legend(location, title, legend, ...)
选项 |
描述 |
location |
指定图例所在的位置 |
title |
指定图例的标题 |
legend |
指定图例 |
其它常见的图里选项包括 bty(指定图框类型),bg(指定背景色), cex(指定尺寸)和text.col(指定文本颜色),设定 horiz=TRUE可以是图例处于水平位置。
# 示例
attach(mtcars)
boxplot(mpg~cyl, main="Milage by Car Weight",
yaxt="n", xlab="Milage",col=terrain.colors(3))
legend("topright", inset=0.05, title="Number ofCylinders",
c("4","6","8"), fill=terrain.colors(3))
这一期的内容相对而言比较多,但都是非常实用且重要的,在后续的绘图中我还会常常提及,希望大家能熟练掌握!