看文献是经常发现有堆叠柱状图+百分比展示的例子,下面就来复现下这样的图形。下图中的C图。
以IMvigor210免疫治疗队列数据为例:
1.输入数据
输入数据rt是两个因子变量
a <- data.frame(table(rt$risk,rt$BOR_binary))
a<- ddply(a,.(Var1),transform,percent=Freq/sum(Freq)*100)
a$label = paste0(sprintf("%.1f", a$percent), "%")
备注:plyr::ddply()
输入data.frame返回data.frame,在计算百分比时特别好使。
2.开始画图
pvalue <- chisq.test(c(125,24,105,44,ncol=2))$p.value #卡方检验
library(plyr)
ggplot(a,aes(Var1,percent,fill=Var2))+
geom_bar(stat="identity",position = position_stack())+
scale_fill_manual(values = c("#DB423E","#008ECA"),label=c("SD/PD","CR/PR"))+
scale_y_continuous(labels = scales::percent_format(scale = 1))+ #百分比y轴
labs(x="Risk",y="Percent Weidght",
fill="")+
geom_text(aes(label=label),vjust=3,size=6,color="black")+
annotate(geom = "text",
cex=6,
x=1.5, y=105, # 根据自己的数据调节p value的位置
label=paste0("P ", ifelse(pvalue<0.001, "< 0.001", paste0("= ",round(pvalue,3)))), # 添加P值
color="black")+
theme_classic()+
theme(legend.position = "top",
legend.text = element_text(size=12),
axis.text = element_text(size=12),
axis.title = element_text(size=12))
参考链接: