如何在ggplot的geom_bar()中区分隔列?填充图案或柱形边框方案
解决方案:为含油处理柱形添加红色边框
步骤说明
- 在数据中新增一列标记是否为含油处理,用于后续映射边框颜色
- 在
ggplot的美学映射中关联边框颜色与标记列 - 配置边框颜色规则:含油处理显示红色边框,不含油处理边框透明(避免干扰原有柱形视觉)
修改后的完整代码
# reproducible data library(tidyverse) mean_data <- tibble( Treatment = c("Control", "Scenario 1", "Scenario 2", "Control", "Ambient + oil", "Scenario 1", "Scenario 1 + oil", "Scenario 2", "Scenario 2 + oil", "Control", "Scenario 1", "Scenario 2", "Control", "Ambient + oil", "Scenario 1", "Scenario 1 + oil", "Scenario 2", "Scenario 2 + oil"), Species = rep(c("C.finmarchius", "C.glacialis"), each = 9), Day = rep(c(rep(1, 3), rep(6, 6)), 2), mean_area = runif(18, 0.1, 0.5), sd_area = runif(18, 0.01, 0.1), LSA = runif(18, 0.1, 0.5) ) %>% # 新增列标记是否为含油处理 mutate(is_oil = str_detect(Treatment, "\\+ oil")) # Create a named vector of the Treatment labels treatment_labels <- c("Control", "Ambient + oil", "Scenario 1", "Scenario 1 + oil", "Scenario 2", "Scenario 2 + oil") # Create histograms with mean lipid sac area and standard deviation histogram2 <- ggplot(mean_data, aes(x = Treatment, y = mean_area, fill = Treatment, color = is_oil)) + geom_bar(stat = "identity", position = "dodge", alpha = 0.8, size = 1) + # size控制边框粗细,可按需调整 geom_errorbar(aes(ymin = mean_area - sd_area, ymax = mean_area + sd_area), width = 0.1, position = "dodge", size = 0.3) + facet_grid(Species ~ paste0("Day ", Day), scales = "free_x") + labs(x = "", y = expression(LSA~"(mm"^2~")"), fill = "") + theme(strip.text.y = element_text(face = "italic")) + scale_fill_manual(values = c("#004C7E", "#004C7E", "#00BAC4", "#00BAC4", "#FFAA27", "#FFAA27"), labels = treatment_labels) + # 设置边框颜色规则,隐藏边框图例 scale_color_manual(values = c("transparent", "red"), guide = "none") + guides(fill = guide_legend(title = "Treatment")) + scale_x_discrete(breaks = NULL) # Display the plot print(histogram2)
关键修改点
- 用
mutate+str_detect自动识别含油处理,生成is_oil标记列 - 在
aes中添加color = is_oil,将边框颜色与含油状态绑定 scale_color_manual配置颜色规则,同时通过guide = "none"避免边框图例干扰原有填充图例- 调整
geom_bar的size参数可修改红色边框的粗细,按需调整即可
内容的提问来源于stack exchange,提问作者Sofie
相关产品推荐
相关产品推荐

