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

