在 multithist 中没有 space 的框

box without space in multhist

假设数据

set.seed(42)
a <- rnorm(100)
b <- rnorm(100)+1

我想使用 multhist().

并排绘制
multhist(list(a,b), yaxs="i")

现在我想在它们周围画一个框

box(which = "plot", lty = "solid")

这给了我

在框的底线和条形之间有一些 space。

如果我使用 hist() 只绘制一张图,则输出框和条形图之间没有间隙:

multhist() 中是否有不同的技巧来获得这样的输出?

只需添加 "space=c(0,0)" 和 "ylim" 就可以了:

multhist(list(a,b), yaxs="i", space=c(0,0), ylim=c(0,40))

我认为@KamranEsmaeili 提到的设置 ylim 是一个标准的解决方案。这里我提供了一个不需要手动设置上限40的tricky方法。


multhist()是在内置的barplot()的基础上,始终将绘图区域的y坐标下限设置为小于0。可以使用par("usr")[3]来检查这个事实。我只是想出了一个棘手的方法,将框类型调整为 "7" 以抑制底线并通过 abline(h = 0).

在 0 处添加一个新的底线
library(plotrix)
set.seed(42)
a <- rnorm(100)
b <- rnorm(100) + 1
multhist(list(a,b))
#---------------------------------
box(bty = "7") # bty is one of "o"(default), "l", "7", "c", "u", and "]".
abline(h = 0)


编辑

如果你不喜欢右边的线超出x轴,那你可以把box()换成rect(),这样你就可以自己指定四边的位置了。记得加xpd = TRUE,不然线宽看起来会比y轴细

multhist(list(a,b))
x <- par("usr")
rect(x[1], 0, x[2], x[4], xpd = TRUE)