ggplot2技术问询:按花朵颜色设置抖动点颜色及分面配色
解决你的ggplot2箱线图需求:抖动点颜色区分+分面配色
嘿,这两个需求都能轻松搞定!我一步步给你拆解修改思路:
1. 让抖动点按花朵颜色区分
你只需要给geom_jitter的映射里加上花朵颜色的关联,再指定对应颜色值就能实现:
library(ggplot2) # 你的原始数据 site <- c(rep(1, 4), rep(2, 4)) colour <- c("red", "green", "red", "green", "red", "green", "red", "green") number <- c(12, 24, 22, 14, 12, 16, 18, 17) df <- data.frame(site, colour, number) df$site <- as.factor(df$site) # 实现抖动点颜色区分的代码 ggplot(df, aes(site, number)) + facet_wrap("colour") + geom_jitter(aes(colour = colour), alpha = 0.3) + # 新增颜色映射关联花朵颜色 geom_boxplot(alpha = 0, colour = "black") + scale_colour_manual(values = c("red" = "red", "green" = "green")) + # 指定对应颜色 theme(legend.position = "none")
这样每个抖动点的颜色就会和它代表的花朵颜色完全匹配啦~
2. 给分面按花朵颜色配色
ggplot原生没有直接给单个分面设置背景色的参数,但有两种简单好用的方法实现:
方法一:用ggh4x包实现分面自定义
ggh4x提供了更灵活的分面控制,能精准给每个分面设置背景色:
先安装并加载包:
install.packages("ggh4x") library(ggh4x)
然后修改代码:
ggplot(df, aes(site, number)) + facet_wrap("colour") + geom_jitter(aes(colour = colour), alpha = 0.3) + geom_boxplot(alpha = 0, colour = "black") + scale_colour_manual(values = c("red" = "red", "green" = "green")) + # 给每个分面设置专属背景色(这里用了淡红/淡绿,你可以自定义颜色代码) facetted_pos_scales( panel = list( colour == "red" ~ theme(panel.background = element_rect(fill = "#ffebee", alpha = 0.3)), colour == "green" ~ theme(panel.background = element_rect(fill = "#e8f5e9", alpha = 0.3)) ) ) + theme(legend.position = "none")
方法二:用patchwork拼接独立图表
这种方法更直观,把两种颜色的图表分开绘制后再拼接,自由度拉满:
先安装并加载包:
install.packages("patchwork") library(patchwork)
然后编写代码:
# 分别绘制红色、绿色花朵的图表 p_red <- ggplot(df[df$colour == "red", ], aes(site, number)) + geom_jitter(colour = "red", alpha = 0.3) + geom_boxplot(alpha = 0, colour = "black") + labs(title = "red") + theme(panel.background = element_rect(fill = "#ffebee", alpha = 0.3)) p_green <- ggplot(df[df$colour == "green", ], aes(site, number)) + geom_jitter(colour = "green", alpha = 0.3) + geom_boxplot(alpha = 0, colour = "black") + labs(title = "green") + theme(panel.background = element_rect(fill = "#e8f5e9", alpha = 0.3)) # 拼接两个图表 p_red + p_green + plot_layout(ncol = 2)
你还能给每个图表单独调整标题、坐标轴样式等,完全按需定制。
内容的提问来源于stack exchange,提问作者KReyn
相关产品推荐
相关产品推荐

