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

如何在ggplot的geom_bar()中区分隔列?填充图案或柱形边框方案

解决方案:为含油处理柱形添加红色边框

步骤说明

  1. 在数据中新增一列标记是否为含油处理,用于后续映射边框颜色
  2. 在ggplot的美学映射中关联边框颜色与标记列
  3. 配置边框颜色规则:含油处理显示红色边框,不含油处理边框透明(避免干扰原有柱形视觉)

修改后的完整代码

# 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:32:04