如何为按值序列分组的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
相关产品推荐
相关产品推荐

