ggplot2使用stat=summary绘制柱状图设置ylim丢失数据如何解决
问题原因
ylim() 本质是 scale_y_continuous(limits = ...) 的简写,它的执行时机在统计汇总计算之前:会先把原始数据中y值超出你设置范围的观测直接删除,再执行后续的stat_summary计算。你的原始value取值是1~10000,远大于你设置的ylim上限10,所以绝大多数原始数据被提前过滤,才会触发警告。
解决方法
方法1(最简单,无需修改原有统计逻辑)
用coord_cartesian()设置坐标轴可视范围,它的执行时机在所有统计计算、图形元素渲染完成之后,仅裁切视图范围,不会删除任何原始数据:
ggplot(test,aes(x=group,y=value))+ geom_bar(stat = "summary",fun=function(x){log(mean(x))})+ coord_cartesian(ylim = c(0,10))
方法2(提前手动计算汇总值再绘图)
你也可以先把需要的统计值算好,再映射到y轴,这时候用ylim()也不会出现数据丢失问题,因为此时y轴对应的就是已经计算完成的对数均值:
library(dplyr) # 先按分组计算对数均值 test_sum <- test %>% group_by(group) %>% summarise(log_mean = log(mean(value))) # 绘图时直接映射计算好的值 ggplot(test_sum,aes(x=group,y=log_mean))+ geom_col()+ ylim(0,10)
内容的提问来源于stack exchange,提问作者Lennon Lee
相关产品推荐
相关产品推荐

