我需要在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显示为蓝色。
谢谢!
使用abline
。要获得正确的位置,请取axTicks
y轴的平均值。
要获取彩色标签,请先省略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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句