在ggplot中不调整limit参数能否绘制超出范围的置信区间?
解决方案
可以不调整scale_y_continuous的limit参数,同时呈现完整的置信区间(包括超出y轴刻度范围的部分),具体有两种实现方式:
方式一:用箭头标记超出范围的置信区间
这种方法保留原y轴刻度0-7,同时用箭头直观提示某组的置信区间超出了当前显示范围:
library(tidyverse) dat = data.frame(estimate = c(1,3,6),conf.low = c(0.5,0.2,0.9), conf.high = c(1.5,3.9,10000), group = as.factor(c(1,2,3))) # 定义y轴上下限 y_low <- 0 y_high <- 7 dat %>% ggplot(aes(x = group, y = estimate)) + geom_pointrange( aes( ymin = pmax(conf.low, y_low), # 下限不低于y轴最小值 ymax = pmin(conf.high, y_high) # 上限不高于y轴最大值 ) ) + # 给超出范围的置信区间添加箭头 geom_segment( data = filter(dat, conf.high > y_high), aes(x = group, xend = group, y = y_high, yend = y_high + 0.5), arrow = arrow(length = unit(0.1, "inches")) ) + scale_y_continuous( limit = c(y_low, y_high), breaks = c(1:7), labels = c(1:7) ) + theme_classic()
这段代码会把第三组的置信区间上限截断到7,同时在7的位置添加向上箭头,提示该区间实际远高于当前y轴范围。
方式二:用coord_cartesian替代scale的limit(不过滤数据)
如果希望完整绘制置信区间(哪怕超出绘图区域),同时保留原y轴刻度0-7,可以用coord_cartesian设置显示范围——它不会像scale_y_continuous(limit)那样过滤超出范围的数据:
dat %>% ggplot(aes(x = group, y = estimate)) + geom_pointrange(aes(ymin = conf.low, ymax = conf.high)) + scale_y_continuous( breaks = c(1:7), labels = c(1:7) ) + coord_cartesian(ylim = c(0,7)) + # 仅调整显示视图,不过滤数据 theme_classic()
这样第三组的置信区间会完整绘制,只是超出0-7的部分会延伸到绘图区域之外,y轴刻度依然保持0-7。
内容的提问来源于stack exchange,提问作者doraemon
相关产品推荐
相关产品推荐

