You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:51:21