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

ggplot堆叠柱状图:移除同类别色块分隔线并添加类别黑色分隔框

解决方法

核心思路是先算出每个年份里data2+data3的总高度,然后只在data和这个总高度的交界处画黑色分隔线,而非给data2、data3各自加框。

方案一:合并data2和data3为同一分组(统一填充色)

如果不需要区分data2和data3的填充色,直接将它们归为同一类别,同时保留与data的分隔线,可用以下代码:

library(tidyverse)

year <- 2022:2026
data <- 15:11
data2 <- 10:6
data3 <- 1:5

dat <- tibble(year, data, data2, data3)

# 预处理数据:合并data2和data3为同一分组,计算分组总高度
data_processed <- dat %>% 
  pivot_longer(all_of(starts_with('data'))) %>%
  mutate(group = case_when(
    name %in% c('data2', 'data3') ~ 'group_23',
    TRUE ~ 'group_data'
  )) %>%
  group_by(year, group) %>%
  summarise(value = sum(value), .groups = 'drop') %>%
  group_by(year) %>%
  mutate(data_height = value[group == 'group_data']) %>%
  ungroup()

# 绘图:堆叠柱状图 + 仅在data与group_23交界处画分隔线
ggplot(data_processed, aes(x = year, y = value, fill = group)) +
  geom_col(position = 'stack') +
  geom_segment(
    data = data_processed %>% distinct(year, data_height),
    aes(x = year - 0.4, xend = year + 0.4, y = data_height, yend = data_height),
    color = 'black', size = 2
  )

方案二:保留data2和data3的独立填充色

如果要保留data2和data3各自的填充色,仅去掉它们之间的分隔线,保留与data的分隔,可用以下代码:

library(tidyverse)

year <- 2022:2026
data <- 15:11
data2 <- 10:6
data3 <- 1:5

dat <- tibble(year, data, data2, data3)

# 预处理数据:计算每个年份data的高度(即分隔线位置)
data_processed <- dat %>% 
  pivot_longer(all_of(starts_with('data'))) %>%
  group_by(year) %>%
  mutate(data_height = value[name == 'data']) %>%
  ungroup()

# 绘图:堆叠柱状图 + 仅在data顶部画分隔线
ggplot(data_processed, aes(x = year, y = value, fill = name)) +
  geom_col(position = 'stack') +
  geom_segment(
    data = data_processed %>% distinct(year, data_height),
    aes(x = year - 0.4, xend = year + 0.4, y = data_height, yend = data_height),
    color = 'black', size = 2
  )

代码说明

  • 两种方案都通过geom_segment精准绘制分隔线,只在data与下方类别交界处画一条粗黑线,避免了原代码中data2和data3之间的多余分隔;
  • 方案一适合需要将data2和data3视为同一大类的场景,方案二保留了三个类别的独立视觉区分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:10:44