R使用ggplot2调用facet_wrap绘图报错:找不到对象'set'
报错原因
- facet_wrap参数语法错误:
facet_wrap()要求传入公式格式的分面变量,需要用波浪号~声明数据框内的列名,你代码中写的-set属于无效表达式,R会尝试在全局环境中查找名为set的独立对象,而非从quartet数据框中取set列,直接触发"object 'set' not found"报错。 - ggplot图层加号位置错误:ggplot2的图层叠加符号
+必须放在上一行代码的末尾,不能放在新行的开头。R会把没有+结尾的行判定为完整语句单独执行,运行到分面代码行时已经丢失了ggplot的数据源上下文,进一步加剧变量识别错误。 - 管道逻辑断裂:你在
group_by+summarize的统计代码结束后没有用管道符%>%传递数据,后续绘图代码和前面的统计代码完全割裂,属于无效的链式写法。 - 依赖包未加载:代码中使用的
group_by、summarize属于dplyr包函数,ggplot相关函数属于ggplot2包,你仅加载了Tmisc包,未加载对应依赖也可能引发变量、函数识别异常。
修复方法
修复后的完整可运行代码如下:
# 安装缺失依赖(已安装可跳过) install.packages(c('Tmisc', 'tidyverse')) # 加载所需包 library(Tmisc) library(tidyverse) data(quartet) View(quartet) # 分组统计部分 quartet %>% group_by(set) %>% summarize( mean_x = mean(x), sd_x = sd(x), mean_y = mean(y), sd_y = sd(y), cor_xy = cor(x,y) ) # 绘图部分 ggplot(quartet, aes(x, y)) + geom_point() + geom_smooth(method = lm, se = FALSE) + facet_wrap(~set)
如果需要把数据处理和绘图写成链式结构,也可以用如下写法:
quartet %>% ggplot(aes(x, y)) + geom_point() + geom_smooth(method = lm, se = FALSE) + facet_wrap(~set)
内容的提问来源于stack exchange,提问作者data123
相关产品推荐
相关产品推荐

