如何在保留设定轴限的前提下避免ggplot2误差棒被截断?
解决方法
问题出在ylim()函数上——它会直接过滤掉超出轴限范围的数据,导致X3的误差棒上限被截断。要保留轴限但让误差棒完整显示,你需要用只调整显示范围、不删除数据的方式设置轴限,具体有两种可行写法:
写法一:用coord_cartesian先设置显示范围,再翻转坐标轴
删掉原代码里的ylim(c(0,4)),换成coord_cartesian(ylim = c(0,4)),注意要把这行放在coord_flip()之前:
label <- paste0("X", 1:6) mean <- c(1.29,0.76,2.43,1.68,1.22,1.7) lower <- c(0.84,0.50,1.58,1.1,0.8,1.11) upper <- c(1.95,1.16,4.5,2.54,1.85,2.56) df <- data.frame(label, mean, lower, upper) library(ggplot2) fp <- ggplot(data=df, aes(x=label, y=mean, ymin=lower, ymax=upper)) + geom_errorbar() + geom_point() + geom_hline(yintercept=1, lty=2) + coord_cartesian(ylim = c(0, 4)) + # 仅限制显示范围,不会过滤超出的数据 coord_flip() + xlab("Label") + ylab("Mean (95% CI)") + theme_bw() fp
写法二:在coord_flip里直接设置轴限
因为coord_flip()会交换x和y轴,原来的y轴会变成翻转后的x轴,所以直接在coord_flip()里设置xlim=c(0,4)即可,无需额外加ylim:
label <- paste0("X", 1:6) mean <- c(1.29,0.76,2.43,1.68,1.22,1.7) lower <- c(0.84,0.50,1.58,1.1,0.8,1.11) upper <- c(1.95,1.16,4.5,2.54,1.85,2.56) df <- data.frame(label, mean, lower, upper) library(ggplot2) fp <- ggplot(data=df, aes(x=label, y=mean, ymin=lower, ymax=upper)) + geom_errorbar() + geom_point() + geom_hline(yintercept=1, lty=2) + coord_flip(xlim = c(0, 4)) + # 翻转时直接指定原y轴的显示范围 xlab("Label") + ylab("Mean (95% CI)") + theme_bw() fp
两种方法都能让X3的误差棒完整显示到4.5,同时保持轴的显示范围在0-4,和目标图效果一致。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

