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

如何为按值序列分组的Boxplot设置差异化填充颜色

解决箱线图按分组设置填充色的问题

问题根源

你当前代码中fill=tavg是映射原始连续变量tavg,但分组是通过cut()生成的离散区间,两者不匹配,导致填充色无法正确对应每个分组箱线。

解决思路

先将分组后的离散变量单独创建为数据框的一列,再将fill映射到这个新的分组变量,这样每个分组就能对应调色板中的一种颜色。

修正后的完整代码

首先处理数据(同时修复原数据行数不一致的问题):

# 生成数据并创建分组列
data <- data.frame(
  tavg = sample(-30:30, 2000, replace = TRUE),
  attendance = sample(100:30000, 2000, replace = TRUE)
) %>% 
  mutate(temp_group = cut(tavg, seq(-20, +30, 5)))

然后绘制箱线图:

box <- data %>% 
  ggplot(aes(x = temp_group, y = attendance, fill = temp_group)) +
  scale_fill_viridis(discrete = TRUE, alpha = 0.6) +
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(color = "black", size = 0.4, alpha = 0.1) +
  theme_ipsum() +
  theme(
    legend.position = "none",
    plot.title = element_text(size = 11)
  ) +
  ggtitle("温度与出勤人数关系箱线图") +
  labs(x = "温度区间")

关键改动说明

  • 新增temp_group列:把分组逻辑从aes中抽离,代码更清晰易维护,同时明确离散分组变量
  • 映射fill到temp_group:确保每个箱线对应调色板中的唯一颜色
  • 修复数据行数:原代码中tavg有2000行但attendance只有1000行,会导致ggplot报错,统一调整为2000行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:07:03