R语言数据列处理组分类赋值与ggplot2绘图配色失效问题
问题修复方案
你的代码无法正常生效、分类目标无法达成,核心是4个问题:
aes()中映射的是图形fill(填充)属性,但你调用的scale_colour_manual()仅控制轮廓/文字/点的颜色,填充色需对应使用scale_fill_manual()- 颜色映射规则不匹配:
Treatment列为数值型,你给颜色向量命名时使用了字符串格式;同时同组的2号处理颜色值写为大写开头的Purple,和其余同组的小写purple不一致,会导致同组颜色不统一 - 列名引用错误:示例数据中花量列名为
B. perennis,代码中写为Bellis.perennis,无法匹配到对应列 - 未提前做分组映射:要将1-4、5-9归为两类,直接在数据框中新增分类列即可,无需给9个处理逐一赋值,后续画柱状图、直方图都可以直接调用该分组列。
可直接运行的修正代码
首先加载依赖包、预处理数据,新增分组标签:
library(ggplot2) library(dplyr) Flower <- Flower %>% mutate( Treatment = as.factor(Treatment), # 转因子类型,避免颜色匹配错误 # 按需求给处理打大类标签,名称可根据试验设计自行修改 treat_group = case_when( Treatment %in% 1:4 ~ "对照组", Treatment %in% 5:9 ~ "处理组" ) )
方案1:按单个处理上色(同组同色)
修正颜色映射规则,替换为填充色标度:
# 统一颜色值写法,命名和Treatment水平一一对应 cols <- c( "1" = "purple", "2" = "purple", "3" = "purple", "4" = "purple", "5" = "red", "6" = "red", "7" = "red", "8" = "red", "9" = "red" ) ggplot(Flower, aes(x = Date, y = `B. perennis`, fill = Treatment)) + scale_fill_manual(values = cols) + geom_col() + labs(x = "调查日期", y = "开花数量", title = "雏菊开花数量统计")
方案2:按合并后的大类上色(适配后续直方图绘制)
直接调用预处理时新建的分组列,代码更简洁,切换直方图只需要替换geom层即可:
# 柱状图 ggplot(Flower, aes(x = Date, y = `B. perennis`, fill = treat_group)) + scale_fill_manual(values = c("对照组" = "purple", "处理组" = "red")) + geom_col(position = position_dodge(0.8)) + labs(x = "调查日期", y = "开花数量", title = "雏菊开花数量统计", fill = "试验分组") # 直方图(统计开花数分布) ggplot(Flower, aes(x = `B. perennis`, fill = treat_group)) + scale_fill_manual(values = c("对照组" = "purple", "处理组" = "red")) + geom_histogram(binwidth = 50, position = "identity", alpha = 0.6) + labs(x = "单样方开花数", y = "频数", title = "雏菊开花数分布直方图", fill = "试验分组")
小提示:带空格、特殊符号的列名在ggplot2的
aes()中引用时,需要用反引号包裹,否则会识别报错。
内容的提问来源于stack exchange,提问作者Rachel97
相关产品推荐
相关产品推荐

