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

如何在R的ggplot2中为分数低于60的条形设置不同颜色?

解决方案

要实现分数低于60的条形颜色区分,核心是在ggplot的颜色映射(fill参数)中加入条件判断,有两种常用实现方式:

方式一:直接在绘图语句中添加条件映射

直接在geom_bar()的aes()里通过ifelse判断分数,生成颜色分组:

set.seed(123)
df = data.frame(Student = sample(state.name, 10), score = sample(1:100, 10, replace=T))

ggplot(df, aes(Student, score)) +
  geom_bar(stat='identity', aes(fill = ifelse(score < 60, "不及格", "及格"))) +
  # 自定义及格/不及格的颜色
  scale_fill_manual(values = c("及格" = "#66CCFF", "不及格" = "#FF6666")) +
  labs(x = "Student_name" , y = "math_score", fill = "成绩等级") +
  # 可选:旋转x轴标签避免重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

方式二:提前处理数据(更易维护)

先给数据框新增一个成绩分组列,再将颜色映射到该列,逻辑更清晰:

set.seed(123)
df = data.frame(Student = sample(state.name, 10), score = sample(1:100, 10, replace=T))

# 新增成绩分组列
df$grade_group = ifelse(df$score < 60, "不及格", "及格")

ggplot(df, aes(Student, score, fill = grade_group)) +
  geom_bar(stat='identity') +
  scale_fill_manual(values = c("及格" = "#66CCFF", "不及格" = "#FF6666")) +
  labs(x = "Student_name" , y = "math_score", fill = "成绩等级") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

关键说明

  • 两种方法的核心都是将fill参数在aes()中绑定到基于分数的条件判断结果,让ggplot自动根据分组分配颜色。
  • scale_fill_manual用于自定义具体颜色,你可以根据需求替换成任意颜色代码或名称。

内容的提问来源于stack exchange,提问作者Ollie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:05:35