如何在分面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
相关产品推荐
相关产品推荐

