R语言:R Studio可见的data.frame在ggplot2可视化代码中报错求助
问题分析与解决方法
报错原因
触发的ggplot_add()错误,本质是语法顺序错误:infer包的visualize()函数本身会直接返回一个完整的ggplot对象,如果你先写ggplot()语法,再试图用+把visualize()的结果加进去,就会违反ggplot的图层叠加规则——+只能给已有ggplot对象添加图层(比如geom_*、labs这类),不能拼接两个完整的ggplot对象。
正确可视化写法
方式1:infer包原生语法(推荐)
直接以visualize()作为起点,后续叠加shade_p_value()和labs()即可,这些函数是infer为ggplot适配的扩展,完全兼容+语法:
visualize(height_diff_under_null) + shade_p_value(obs_stat = obs_diff_position_height, direction = "both") + labs( x = "前锋与中锋的身高均值差", y = "频数", title = "前锋与中锋身高均值差的零分布", subtitle = "数据中观测到的实际差值标记为红色" )
方式2:手动用ggplot2重构
如果想完全用ggplot2原生语法实现,可以直接基于height_diff_under_null的stat列构建图形,手动添加观测值标记和p值阴影:
library(ggplot2) ggplot(height_diff_under_null, aes(x = stat)) + # 绘制零分布直方图 geom_histogram(binwidth = 0.1, fill = "lightblue", color = "black") + # 添加观测差值的红色竖线 geom_vline( xintercept = obs_diff_position_height, color = "red", linetype = "solid", linewidth = 1 ) + # 手动绘制双侧p值对应的阴影区域 geom_area( data = subset(height_diff_under_null, abs(stat) >= abs(obs_diff_position_height)), aes(y = after_stat(count)), stat = "bin", binwidth = 0.1, fill = "pink", alpha = 0.5 ) + labs( x = "前锋与中锋的身高均值差", y = "频数", title = "前锋与中锋身高均值差的零分布", subtitle = "数据中观测到的实际差值标记为红色" )
避坑注意点
不要写出ggplot() + visualize(height_diff_under_null)这类代码——visualize()已经生成了完整的ggplot对象,不需要再套一层ggplot()。
内容的提问来源于stack exchange,提问作者travis irvin
相关产品推荐
相关产品推荐

