❝之前在一篇论文里面看到一张特殊的组合饼图感觉很不错,下面来构建数据进行复现,来看具体案例❞
library(tidyverse)
library(scales)
library(ggtext)
library(patchwork)
library(cowplot)
library(RColorBrewer)
mycolors <- colorRampPalette(brewer.pal(12,"Paired"))(21)
df <- tribble(~group,~value,
"A", 40,
"B",60)
p1 <- df %>% arrange(desc(value)) %>%
ggplot(.,aes(x="",y=value,fill=group))+
geom_bar(width=1,stat="identity")+
coord_polar("y",start=0)+
geom_text(aes(y = value/2 + c(0, cumsum(value)[-length(value)]),
label = percent(value/100)), size=4)+
scale_fill_manual(values = mycolors)+
theme(axis.text.x=element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.border = element_blank(),
panel.grid=element_blank(),
axis.ticks = element_blank(),
panel.background = element_blank(),
legend.position = "none",
legend.title = element_blank(),
legend.text = element_text(color="black",size=9),
legend.spacing.x=unit(0.1,'cm'),
legend.key.width=unit(0.5,'cm'),
legend.key.height=unit(0.5,'cm'),
legend.background=element_blank())
df2 <- read_tsv("otu_taxa_table.xls") %>%
select(OTU:C5,taxonomy) %>%
separate(taxonomy,
into=c("domain","phylum","class","order","family","genus","species"),sep=";") %>%
mutate_at(vars(c(`domain`:`species`)),~str_split(.,"__",simplify=TRUE)[,2]) %>%
select(A1:C5,genus) %>% drop_na() %>%
group_by(genus) %>% filter(genus !="") %>%
count() %>% ungroup() %>% mutate(value=n/sum(n)) %>% arrange(desc(value)) %>%
mutate(group=case_when(value < 0.0088999644 ~ "others",
TRUE ~ as.character(genus))) %>%
group_by(group) %>% summarise(value=sum(value)) %>% arrange(desc(value))
df2$group <- factor(df2$group,levels = df2$group)
p2 <- df2 %>% ggplot(.,aes(x="",y=value,fill=group))+
geom_bar(width=1,stat="identity")+
coord_polar("y",start=0)+
scale_fill_manual(values = mycolors)+
theme(axis.text.x=element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.border = element_blank(),
panel.grid=element_blank(),
axis.ticks = element_blank(),
panel.background = element_blank(),
legend.position = "none",
legend.title = element_blank(),
plot.margin=unit(c(0,13,0,0),units="cm"),
legend.text = element_text(color="black",size=9),
legend.spacing.x=unit(0.1,'cm'),
legend.key.width=unit(0.5,'cm'),
legend.key.height=unit(0.5,'cm'),
legend.background=element_blank())
p2 %>% ggdraw()+draw_plot(p1,scale=0.4,x=0.38,y=0)
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有