在R的ggplot2中为箱线图散点按未纳入变量上色
解决方案:给箱线图散点按指定变量上色
方法1:直接用连续变量disp上色
只需在geom_dotplot的单独aes映射里添加颜色参数,就能让散点按连续型的disp值生成渐变配色,且不会影响箱线图的样式:
library(ggplot2); library(dplyr) mtcarscol <- mutate(mtcars, gear.factor = as.factor(gear)) ggplot(mtcarscol, aes(x = gear.factor, y = mpg)) + geom_boxplot() + # 仅给散点添加颜色映射 geom_dotplot(aes(color = disp), binaxis = 'y', stackdir = 'center', dotsize=.75) + # 可选:替换为色盲友好的渐变配色 scale_color_viridis_c(option = "plasma")
如果需要填充点的内部颜色而非边框,把color换成fill,并补充填充色的刻度设置:
ggplot(mtcarscol, aes(x = gear.factor, y = mpg)) + geom_boxplot() + geom_dotplot(aes(fill = disp), binaxis = 'y', stackdir = 'center', dotsize=.75, color = "black") + scale_fill_viridis_c(option = "plasma")
方法2:将连续变量转为因子后上色
如果需要把disp分成离散组别,用cut()函数将其转为因子型变量,再按组别上色:
mtcarscol <- mtcars %>% mutate(gear.factor = as.factor(gear), # 自定义划分3个排量区间并命名 disp_group = cut(disp, breaks = 3, labels = c("低排量", "中排量", "高排量"))) ggplot(mtcarscol, aes(x = gear.factor, y = mpg)) + geom_boxplot() + geom_dotplot(aes(fill = disp_group), binaxis = 'y', stackdir = 'center', dotsize=.75, color = "black") + # 为离散因子设置自定义配色 scale_fill_brewer(palette = "Set2")
关键提示
- 不要在
ggplot()的全局aes里加颜色映射,否则箱线图也会被按disp上色,不符合需求。 - 转因子时,可通过
breaks参数手动指定区间分割点,比如breaks = c(0, 200, 400, 600)来精准划分排量范围。
内容的提问来源于stack exchange,提问作者Ethan Glenn
相关产品推荐
相关产品推荐

