R语言ggplot绘图报错:手动色阶值不足,需4个仅提供3个
报错原因
你的代码调用scale_colour_manual时仅提供了3个颜色值,但数据中Morph列的唯一分组数为4,ggplot无法为所有分组匹配对应的颜色,因此触发该报错。此外你的代码中geom_polygon也将Morph映射给了fill参数,如果未单独设置fill的色阶规则,也会继承全局配色要求,进一步触发配色不足的问题。
解决步骤
- 先确认分组数量,运行以下代码查看两个数据集的
Morph唯一值:
# 查看点数据集的Morph类别 unique(brook$Morph) # 查看多边形数据集的Morph类别 unique(ch$Morph)
统计所有出现过的不同类别总数,确认是否为4个,常见的额外类别为未处理的NA值、拼写不一致的分组名。
- 补充对应的颜色值,如果你确实需要4个分组的展示,将
scale_colour_manual的颜色参数修改为4个值,同时补充fill的手动配色规则,示例修改如下:
brookeana_pca_plot <- ggplot(data = brook, aes(x = pc1, y = pc2, colour = Morph)) + geom_point(size = 2) + # 补充为4个颜色,可根据需求替换为你需要的色值 scale_colour_manual(values = c("red","blue", "green", "purple")) + # 新增fill的手动配色,和点的颜色对应即可 scale_fill_manual(values = c("red","blue", "green", "purple")) + theme_bw() + xlab("Principal component 1") + ylab("Principal component 2") brookeana_pca_plot <- brookeana_pca_plot + geom_polygon(data = ch, aes(fill = Morph, colour = NA), alpha = 0.2) + ggtitle("O. Brookeana") + theme(plot.title = element_text(face = "italic")) brookeana_pca_plot
- 如果多出来的分组是无效值(比如NA),提前过滤掉数据中的无效行即可:
# 过滤掉Morph为NA的行 brook <- brook[!is.na(brook$Morph), ] ch <- ch[!is.na(ch$Morph), ]
过滤完成后再运行原绘图代码即可。
内容的提问来源于stack exchange,提问作者Priyanka Ghosh
相关产品推荐
相关产品推荐

