我需要在Base R箱线图中添加“分隔线”以分隔差异组。在下面的示例中,我想使用水平线(红色)分隔A和B组(每个组具有2个级别)。 R代码可再现的结果:
dat = data.frame(A1 = rnorm(1000, 0, 1), A2 = rnorm(1000, 1, 2),
B1 = rnorm(1000, 0.5, 0.5), B2 = rnorm(1000, 1.5, 1.5))
boxplot(dat, horizontal = T, outline=F)
在Base R中有一种简单的方法吗?
还有,是否有一种简单的方法可以为y轴标签着色?我希望轴上的A1和B1显示为红色,而A2和B2显示为蓝色。
谢谢!
答案 0 :(得分:1)
使用abline
。要获得正确的位置,请使用y轴axTicks
的平均值。
要获取彩色标签,请先省略yaxt
并使用axis
重建mtext
的刻度和axTicks
。
b <- boxplot(dat, horizontal=T, outline=F, yaxt="n")
ats <- axTicks(2)
axis(2, labels=F)
mtext(b$names, 2, 1, col=c(2, 4), at=ats)
abline(h=mean(ats), lwd=2, col=2)
如果要使轴刻度标签颜色与标签相对应,请改用segments
。
b <- boxplot(dat, horizontal=T, outline=F, yaxt="n")
ats <- axTicks(2)
abline(h=mean(ats), lwd=2, col=2)
pu <- par()$usr
Map(function(x, y) segments(pu[1] - .2, x, pu[1], x, xpd=T, col=y), ats, c(2, 4))
mtext(b$names, 2, 1, col=c(2, 4), at=ats)
编辑:要进一步调整空间,请使用at=
中的boxplot
选项,而忽略中间的axTicks
。
b <- boxplot(dat, horizontal=T, outline=F, yaxt="n", at=c(1, 2, 4, 5))
ats <- axTicks(2)[-3]
abline(h=mean(ats), lwd=2, col=2)
pu <- par()$usr
Map(function(x, y) segments(pu[1] - .2, x, pu[1], x, xpd=T, col=y), ats, c(2, 4))
mtext(b$names, 2, 1, col=c(2, 4), at=ats)