幫朋友復現的圖,這里代碼做個留存記錄
07ccf9ba01fd0eff123fe454e82f12c.png
R代碼
library(ggplot2)
library(ggnewscale)
library(dplyr)
# 創建示例數據(按大致占比)
data <- data.frame(
group = c("PD1+", "LAG3+", "TIM3+", "PD1+LAG3+", "PD1+TIM3+", "LAG3+TIM3+", "PD1+LAG3+TIM3+", "陰性"),
value = c(15, 10, 5, 10, 7, 6, 8, 40),
color = c("blue", "red", "yellow", "purple", "lightblue", "orange", "brown", "gray80")
)
# 計算起始和結束角度
data <- data %>%
arrange(desc(value)) %>%
mutate(end = cumsum(value),
start = lag(end, default = 0))
# 繪制餅圖
P <- ggplot(data, aes(ymin = 0, ymax = 1, xmin = start, xmax = end, fill = group)) +
geom_rect() +
scale_fill_manual(values = setNames(data$color, data$group)) +
coord_polar(theta = "x") +
theme_void() +
theme(legend.position = "none") +
ggtitle("SFV-Luc 免疫分布") +
new_scale_fill() + # 開啟第二個填充層
# 疊加外圈標注
geom_rect(data = data %>% filter(group %in% c("PD1+", "PD1+LAG3+", "PD1+TIM3+", "PD1+LAG3+TIM3+")),
aes(ymin = 1, ymax = 1.1, xmin = start, xmax = end, fill = "PD1+"), inherit.aes = FALSE) +
geom_rect(data = data %>% filter(group %in% c("LAG3+", "PD1+LAG3+", "LAG3+TIM3+", "PD1+LAG3+TIM3+")),
aes(ymin = 1.1, ymax = 1.2, xmin = start, xmax = end, fill = "LAG3+"), inherit.aes = FALSE) +
geom_rect(data = data %>% filter(group %in% c("TIM3+", "PD1+TIM3+", "LAG3+TIM3+", "PD1+LAG3+TIM3+")),
aes(ymin = 1.2, ymax = 1.3, xmin = start, xmax = end, fill = "TIM3+"), inherit.aes = FALSE) +
scale_fill_manual(values = c("PD1+" = "blue", "LAG3+" = "red", "TIM3+" = "yellow"), na.value = NA)
P
結果圖:
2fa17643fcdccf7b3ffc2ed67a2f057.png