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

如何在分面geom_bar()中标记指定条形与X轴标签

数据
structure(list(validated_1 = c("sombra", "sombra", "sombra", 
"sombra", "sombra", "sombra", "sombra", "sombra", "sombra", "sombra", 
"coscinodiscus", "sombra", "coscinodiscus", "coscinodiscus", 
"sombra", "coscinodiscus", "sombra", "coscinodiscus", "sombra", 
"coscinodiscus", "coscinodiscus", "detritos", "detritos", "coscinodiscus", 
"appendicularia", "detritos", "coscinodiscus", "coscinodiscus", 
"detritos", "coscinodiscus", "langanho", "detritos", "copepodo", 
"langanho", "copepodo", "langanho", "langanho", "coscinodiscus", 
"coscinodiscus", "coscinodiscus"), validated_2 = c("sombra", 
"sombra", "sombra", "sombra", "sombra", "sombra", "sombra", "sombra", 
"sombra", "sombra", "coscinodiscus", "sombra", "coscinodiscus", 
"coscinodiscus", "sombra", "coscinodiscus", "sombra", "coscinodiscus", 
"sombra", "coscinodiscus", "coscinodiscus", "detritos", "detritos", 
"coscinodiscus", "zooplâncton", "detritos", "coscinodiscus", 
"coscinodiscus", "detritos", "coscinodiscus", "langanho", "detritos", 
"zooplâncton", "langanho", "zooplâncton", "langanho", "langanho", 
"coscinodiscus", "coscinodiscus", "coscinodiscus")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -40L))
原绘图代码
df %>%
  count(validated_1, validated_2, sort = TRUE, name = "count") %>%
  mutate(groups = c(rep("high N", 2), rep("lower N", 4))) %>%
  ggplot(aes(x = reorder(validated_1, -count), y = count)) +
  geom_col(aes(fill = validated_2)) +
  facet_wrap(~groups, nrow = 2, scales = "free") +
  geom_text(aes(label = count), vjust = -0.5, size = 3)
三种标记copepodo条形的方案

方案1:在条形上方添加半透明矩形标记

通过geom_rect定位copepodo的位置,绘制醒目的矩形:

df %>%
  count(validated_1, validated_2, sort = TRUE, name = "count") %>%
  mutate(groups = c(rep("high N", 2), rep("lower N", 4))) %>%
  ggplot(aes(x = reorder(validated_1, -count), y = count)) +
  geom_col(aes(fill = validated_2)) +
  facet_wrap(~groups, nrow = 2, scales = "free") +
  geom_text(aes(label = count), vjust = -0.5, size = 3) +
  # 添加矩形标记copepodo
  geom_rect(
    data = . %>% filter(validated_1 == "copepodo"),
    aes(xmin = as.integer(x) - 0.4, xmax = as.integer(x) + 0.4,
        ymin = count + 0.1, ymax = count + 0.3),
    fill = "red", alpha = 0.5
  )
  • 用filter精准定位copepodo的行数据
  • 调整xmin/xmax控制矩形宽度,ymin/ymax控制矩形在条形上方的位置和高度
  • 半透明红色既突出又不遮挡原有内容

方案2:在条形上方添加箭头标记

用geom_segment绘制指向条形顶部的箭头:

df %>%
  count(validated_1, validated_2, sort = TRUE, name = "count") %>%
  mutate(groups = c(rep("high N", 2), rep("lower N", 4))) %>%
  ggplot(aes(x = reorder(validated_1, -count), y = count)) +
  geom_col(aes(fill = validated_2)) +
  facet_wrap(~groups, nrow = 2, scales = "free") +
  geom_text(aes(label = count), vjust = -0.5, size = 3) +
  # 添加箭头标记copepodo
  geom_segment(
    data = . %>% filter(validated_1 == "copepodo"),
    aes(x = x, xend = x, y = count + 0.2, yend = count + 0.5),
    arrow = arrow(length = unit(0.2, "cm")),
    color = "blue", size = 1
  )
  • 箭头垂直向上指向条形顶部,视觉引导性强
  • 可通过调整y参数改变箭头的长度和位置

方案3:放大copepodo的X轴标签字号

通过guide_axis单独指定目标标签的样式:

df %>%
  count(validated_1, validated_2, sort = TRUE, name = "count") %>%
  mutate(groups = c(rep("high N", 2), rep("lower N", 4))) %>%
  ggplot(aes(x = reorder(validated_1, -count), y = count)) +
  geom_col(aes(fill = validated_2)) +
  facet_wrap(~groups, nrow = 2, scales = "free") +
  geom_text(aes(label = count), vjust = -0.5, size = 3) +
  # 放大copepodo的X轴标签
  scale_x_discrete(
    guide = guide_axis(
      label_style = list(
        fontface = ifelse(levels(reorder(validated_1, -count)) == "copepodo", "bold", "plain"),
        size = ifelse(levels(reorder(validated_1, -count)) == "copepodo", 10, 8)
      )
    )
  )
  • 给copepodo标签单独设置10号字号(其他标签为8号),同时加粗
  • 从X轴标签层面直接突出目标类别

内容的提问来源于stack exchange,提问作者Wilson Souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:06:24