# 来源 https://www.r2omics.cn/
library(tidyverse)
# 读取数据
df = read.delim("https://www.r2omics.cn/res/demodata/circleBar.txt", sep = "\t", check.names = FALSE)
# 设置添加分组间隔
empty_bar = 2
to_add = data.frame(Group = rep(unique(df$Group), each = empty_bar))
to_add[setdiff(names(df), "Group")] = NA
data = bind_rows(df, to_add) %>%
arrange(Group) %>%
mutate(id = row_number())
# 设置添加label标签信息
label_data = data %>%
mutate(
angle = 90 - 360 * (id - 0.5) / n(),
hjust = ifelse(angle < -90, 1, 0),
hjust2 = ifelse(angle < -90, 0, 1),
label = ifelse(angle < -90, paste0(Sample," "), paste0(" ",Sample)),
angle = ifelse(angle < -90, angle + 180, angle)
)
numMax <- max(na.omit(data$Value)) # 获取最大值
# 绘图
ggplot(data, aes(x = as.factor(id), y = Value, fill = Group)) +
geom_bar(stat = "identity", alpha = 0.5) +
ylim(-0.5 * numMax, numMax * 1.2) +
theme_void() +
theme(
legend.position = c(0.5, 0.5)
) +
coord_polar() +
# 添加标签注释信息
geom_text(data = label_data, aes(x = id, y = Value, label = label, hjust = hjust),
color = "black", fontface = "bold",
alpha = 0.6, size = 2.5,
angle = label_data$angle, inherit.aes = FALSE) +
# geom_text(data=label_data, aes(x=id, y=Value, label=Value, hjust=hjust2),
# color="black", fontface="bold",alpha=0.6, size=2.5, angle= label_data$angle, inherit.aes = FALSE ) +
scale_fill_brewer(palette = "Set2")