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

如何在R语言环形图中添加分组间隙?

环形图分组间隙问题解决办法

你遇到的问题是分组间没有预期的空白间隙,原因是原代码将空bar添加到了每个组的末尾,而非组与组之间。调整代码逻辑,在组之间插入空行即可实现间隙效果。

修改后的完整代码:

library(tidyverse)

# 创建数据集
data <- data.frame(
  individual=paste( "Mister ", seq(1,60), sep=""),
  group=c( rep('A', 10), rep('B', 30), rep('C', 14), rep('D', 6)) ,
  value=sample( seq(10,100), 60, replace=T)
)

# 设置每组之间要添加的空bar数量
empty_bar <- 4

# 按组排序并拆分数据
data_sorted <- data %>% arrange(group)
group_list <- split(data_sorted, data_sorted$group)

# 在组之间插入空行
new_data <- list()
for (i in seq_along(group_list)) {
  new_data[[i]] <- group_list[[i]]
  # 非最后一组时插入空行
  if (i != length(group_list)) {
    empty_rows <- data.frame(
      individual = rep(NA, empty_bar),
      group = rep(names(group_list)[i], empty_bar),
      value = rep(NA, empty_bar)
    )
    new_data[[i+length(group_list)]] <- empty_rows
  }
}

# 合并数据并生成新的id
data <- bind_rows(new_data)
data$id <- seq(1, nrow(data))

# 处理标签位置与角度
label_data <- data
number_of_bar <- nrow(label_data)
angle <- 90 - 360 * (label_data$id-0.5) / number_of_bar     
label_data$hjust <- ifelse(angle < -90, 1, 0)
label_data$angle <- ifelse(angle < -90, angle+180, angle)

# 绘制环形图
p <- ggplot(data, aes(x=as.factor(id), y=value, fill=group)) +
  geom_bar(stat="identity", alpha=0.5) +
  ylim(-100, 120) +
  theme_minimal() +
  theme(
    legend.position = "none",
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank(),
    plot.margin = unit(rep(-1, 4), "cm") 
  ) +
  coord_polar() + 
  geom_text(data=label_data, aes(x=id, y=value+10, label=individual, hjust=hjust), 
            color="black", fontface="bold", alpha=0.6, size=2.5, angle=label_data$angle, 
            inherit.aes = FALSE) 

p

关键修改说明

  • 原代码将空bar追加到所有数据后再按组排序,导致空bar与同组数据连在一起;现在改为先拆分各组数据,在组与组之间插入空行,确保间隙出现在分组之间。
  • 空行的value设为NA,geom_bar会自动忽略这些行,从而形成空白间隙。

内容的提问来源于stack exchange,提问作者Ana-Maria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:55:54