箱线图均值点无法显示问题排查及坐标轴标签调整咨询
问题解答
1. 均值点未显示的原因及修复
你设置了horizontal = TRUE后,箱线图的坐标轴方向反转:数值轴是x轴,类别轴是y轴。你调用points(means, col="red", pch=18)时只传了x坐标(均值),y坐标默认是1,导致三个均值点全部重叠在y=1的位置,被第一个箱线图完全挡住,自然看不到。
修复方法很简单,给points函数指定对应每个物种的y坐标(1、2、3分别对应setosa、versicolor、virginica),调整后的完整代码:
par(las = 1, mar=c(4, 6, 1, 1)) boxplot(Sepal.Length~Species, data = iris, xlab = 'Species', ylab = 'Sepal Length', horizontal = TRUE) means <- tapply(iris$Sepal.Length,iris$Species,mean) # 补充对应物种的y轴位置参数 points(means, 1:3, col="red", pch=18)
2. 单独移动x轴标签的方法
直接用boxplot的xlab参数无法单独调整位置,需要先把默认x轴标签设为空,再用mtext函数单独绘制x轴标签,通过line参数控制标签与x轴刻度的距离,完全不会影响y轴标签:
par(las = 1, mar=c(4, 6, 1, 1)) boxplot(Sepal.Length~Species, data = iris, xlab = '', # 取消默认x轴标签 ylab = 'Sepal Length', horizontal = TRUE) # 单独绘制x轴标签,line=3表示距离x轴刻度3行的位置,可根据需求调整数值 mtext('Species', side = 1, line = 3, cex = 1) means <- tapply(iris$Sepal.Length,iris$Species,mean) points(means, 1:3, col="red", pch=18)
如果需要调整标签的左右偏移,还可以添加at参数,比如at = mean(range(iris$Sepal.Length))让标签居中,或者指定具体数值实现左右移动。
内容的提问来源于stack exchange,提问作者Jake S
相关产品推荐
相关产品推荐

