如何在R框图中的轴标签和轴标题之间放置更多空格

时间:2011-03-31 20:40:17

标签: r

我正在使用以下代码在R中创建一个boxplot:

boxplot(perc.OM.y ~ Depth, axes = F, ylim = c(-0.6, 0.2), xlim = c(3.5, 5.5),
        lwd = 0.1, col = 8, 
        ylab = "Loss of Percent Organic Matter per Year", cex.lab = 1.5)
axis(1, at = c(3.5, 4, 5, 5.5), labels = c(" ", "Shallow", "Deep", " "), 
     cex.axis = 1.5)
axis(2, cex.axis = 1.5)

问题是y轴上的数字标签当前与轴标题重叠。有没有办法在轴标题和轴号标签之间放置更多空间?

谢谢

3 个答案:

答案 0 :(得分:41)

## dummy data
dat <- data.frame(Depth = sample(c(3:6), 20, replace = TRUE), OM = 5 * runif(20))

通过在图的左侧(side = 2)使边距更大来为y轴标签和注释添加一些空间:

## margin for side 2 is 7 lines in size
op <- par(mar = c(5,7,4,2) + 0.1) ## default is c(5,4,4,2) + 0.1

现在情节:

## draw the plot but without annotation
boxplot(OM ~ Depth, data = dat, axes = FALSE, ann = FALSE)
## add axes
axis(1, at = 1:4, labels = c(" ", "Shallow", "Deep", " "), cex.axis = 1.5)
axis(2, cex.axis = 2)
## now draw the y-axis annotation on a different line out from the plot
## using the extra margin space:
title(ylab = "Loss of Percent Organic Matter per Year", cex.lab = 1.5,
      line = 4.5)
## draw the box to finish off
box()

然后重置绘图边距:

par(op)

这给出了:

boxplot

因此,我们为第2侧的绘图边距创建了更多空间,然后分别绘制了轴和注释(ylab)以控制绘图的间距。

所以关键是这一行:

op <- par(mar = c(5,7,4,2) + 0.1) ## default is c(5,4,4,2) + 0.1

我们所做的是将原始图形参数保存在对象op中,将边距大小(行数)更改为5,7,4,2 + 0.1行每个分别用于底部,左侧,顶部,右侧边缘。上面的行显示默认值,因此代码在左边距上比在默认情况下通常提供的多2行。

然后,当我们使用title()绘制y轴标签时,我们指定绘制标签的那条线(7):

title(ylab = "Loss of Percent Organic Matter per Year", cex.lab = 1.5,
      line = 4.5)

我在这里使用了行4.5,但5也适用。 'line'的值越远离绘图标签的绘图。

诀窍是在'line'调用中找到左边距title()的值,该值允许轴刻度线和轴标签不交叠。试验和错误可能是找到基本图形所需值的最佳解决方案。

答案 1 :(得分:23)

尝试将mgp的第一个值设置得更大。您还希望使用mar来扩大边距。

par(mgp=c(5,1,0))
par(mar=c(5,6,4,2)+0.1)

答案 2 :(得分:4)

我只是发现这个解决方案非常简单有用,当我想缩小图表周围的空白区域时(考虑会议论文中的大小限制!),而我想避免重叠Y轴标题和大数字作为刻度。

我用手工设置边距后,将标题设置为文本并将其放在我想要的任何位置:

首先,将边距设置为任意值:

par( mar=c(m1, m2, m3, m4) ) 

其中m1到m4是四边的边距(1 =底部,2 =左边,3 =顶部,4 =右边)。

例如:

par( mar=c(3.1, 4.7, 2.3, 0)) 

然后,在绘图时,设置main =“”,xlab =“”和ylab =“”(否则它们的文本将与此新文本重叠)

最后,使用mtext(),手动设置轴标题和图表标题:

mtext(side=1, text="X axes title", line=0.5)
mtext(side=2, text="Y axes title", line=3)
mtext(side=3, text="Diagram title", line=1.5)

线参数是图表的距离(较小的值使其更靠近图表)。