ggplot2绘制线性混合效应模型报错:连续值传入离散刻度
解决ggplot2中「Continuous value supplied to discrete scale」报错问题
问题根源
你的condition列是整数类型(从数据结构里的1L可以看出),R默认将整数视为连续变量,但你在geom_point中用它映射颜色,同时搭配了针对离散变量的scale_color_manual,两者类型不匹配导致报错。
解决方案
1. 将condition转换为因子类型
先把summStats_td_mean中的condition转为离散的因子类型,这样ggplot就能识别为分组变量:
# 基础R写法 summStats_td_mean$condition <- factor(summStats_td_mean$condition) # 如果你用dplyr # summStats_td_mean <- summStats_td_mean %>% mutate(condition = factor(condition))
2. 优化ggplot代码(可选但推荐)
不要在aes()里直接写data$column的形式(比如td_mean_pref_plot_groups$predicted),ggplot会自动从指定的数据源读取列,直接写列名更规范。
修改后的完整代码
# 转换变量类型 summStats_td_mean$condition <- factor(summStats_td_mean$condition) # 绘制图形 p2 <- ggplot(td_mean_pref_plot_groups, aes(x, predicted, col = group)) + geom_line(size=1.5) + scale_color_manual(values = c("blue","red")) + geom_ribbon(aes(ymin=conf.low, ymax=conf.high, fill=group), alpha=.2, colour=NA) + scale_fill_manual(values = c("blue","red")) + geom_point(data=summStats_td_mean, aes(trial, mean, col = condition), size=2) + theme_bw() + xlab('Trial') + ylab('Prediction Error') + ylim(1,2.2) + ggtitle('TD learning about TD vs. TD \n learning about ASD') + theme(text=element_text(size=20), plot.title = element_text(hjust = 0.5), panel.border = element_blank()) p2
补充说明
之前相同代码未报错,大概率是因为当时的condition列已经是因子类型,或者数据导入时被自动识别为离散变量。这次的数据中condition是整数,所以触发了类型不匹配的问题。
内容的提问来源于stack exchange,提问作者Shannon Cahalan
相关产品推荐
相关产品推荐

