如何在R语言多面板图的Y轴上方添加A)、B)类图标签
解决R语言2×2多面板图添加子图标签的问题
不用依赖手动定位的locator(),可以通过自动获取绘图区域坐标或使用mtext()来精准添加标签,以下是两种可靠的实现方式:
方法1:利用par("usr")自动计算坐标
par("usr")会返回当前绘图区域的边界坐标(格式为c(xmin, xmax, ymin, ymax)),基于这个可以计算出Y轴正上方的标签位置,完全避免手动定位的误差:
a <- seq(1, 29) + 4*runif(29, 0.4) b <- seq(1, 29)^2 + runif(29, 0.98) # 设置2×2面板布局 par(mfrow=c(2, 2)) # 子图A plot(a, b , pch=20) usr <- par("usr") # 获取当前绘图区域的边界坐标 # 在Y轴顶部左侧添加标签,偏移量根据绘图范围自动计算 text(usr[1], usr[4] + 0.05*(usr[4]-usr[3]), "A)", font=2, adj=0) # 子图B plot(a - b , pch=18) usr <- par("usr") text(usr[1], usr[4] + 0.05*(usr[4]-usr[3]), "B)", font=2, adj=0) # 子图C hist(a, border=FALSE, col=rgb(0.2, 0.2, 0.8, 0.7), main="") usr <- par("usr") text(usr[1], usr[4] + 0.05*(usr[4]-usr[3]), "C)", font=2, adj=0) # 子图D boxplot(a , col="grey" , xlab="a") usr <- par("usr") text(usr[1], usr[4] + 0.05*(usr[4]-usr[3]), "D)", font=2, adj=0)
方法2:使用mtext()直接指定位置
mtext()专门用于在绘图区域边缘添加文本,通过参数精准控制位置,代码更简洁易维护:
a <- seq(1, 29) + 4*runif(29, 0.4) b <- seq(1, 29)^2 + runif(29, 0.98) par(mfrow=c(2, 2)) # 子图A plot(a, b , pch=20) # side=3表示顶部边缘,line=1控制标签与绘图区域的距离,adj=0实现左对齐(对应Y轴正上方) mtext("A)", side=3, line=1, adj=0, font=2) # 子图B plot(a - b , pch=18) mtext("B)", side=3, line=1, adj=0, font=2) # 子图C hist(a, border=FALSE, col=rgb(0.2, 0.2, 0.8, 0.7), main="") mtext("C)", side=3, line=1, adj=0, font=2) # 子图D boxplot(a , col="grey" , xlab="a") mtext("D)", side=3, line=1, adj=0, font=2)
两种方法都能保证标签位置统一、可重复,推荐使用mtext()方案,代码更简洁且适配各类绘图类型。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

