如何在含Pvalue的通路柱状图中添加Rich factor信息?
通路分析需求及解决方案
通路分析数据
| Pathway | #Proteins | Pvalue | Richfactor |
|---|---|---|---|
| 肽链延伸 | 90 | 1.11E-16 | 0.5 |
| 翻译延伸 | 79 | 1.11E-16 | 0.7 |
| P53通路 | 50 | 1.11E-16 | 0.2 |
| cGAS-sting通路 | 20 | 1.11E-16 | 0.4 |
需求说明
已使用ggplot2生成展示#Proteins、以Pvalue填充颜色的通路柱状图,需在图中添加Rich factor信息。
解决方案
方案1:在柱子上方标注Rich factor数值
这种方式直接在每个柱状图上方添加对应Rich factor的文本,直观展示数值:
library(ggplot2) library(viridis) # 读取数据 top_fun <- read.delim(file="Pathways.txt", header = TRUE) topfun <- as.data.frame(top_fun) # 保持Pathway的原有顺序 topfun$Pathway <- factor(topfun$Pathway, levels=unique(topfun$Pathway)) ggplot(topfun, aes(x=Group, y=Proteins, fill=Pvalue)) + geom_col(position="dodge", width=0.4) + # 添加Rich factor标注,格式为"RF: 数值",放在柱子上方 geom_text(aes(label=paste0("RF: ", Richfactor)), position=position_dodge(width=0.4), vjust=-0.5, size=3.5) + coord_flip() + scale_fill_viridis(option="mako") + facet_grid(Pathway~.) + theme(strip.text.y = element_text(angle = 0)) + # 扩展Y轴范围,避免标注被截断 expand_limits(y=max(topfun$Proteins)*1.1)
方案2:双Y轴同时展示#Proteins和Rich factor
如果需要对比#Proteins与Rich factor的趋势,可采用双Y轴,左侧展示柱状图的#Proteins,右侧展示Rich factor的散点:
library(ggplot2) library(viridis) top_fun <- read.delim(file="Pathways.txt", header = TRUE) topfun <- as.data.frame(top_fun) topfun$Pathway <- factor(topfun$Pathway, levels=unique(topfun$Pathway)) # 计算Rich factor与#Proteins的比例转换系数 rf_scale <- max(topfun$Richfactor)/max(topfun$Proteins) ggplot(topfun, aes(x=Group)) + # 绘制#Proteins柱状图 geom_col(aes(y=Proteins, fill=Pvalue), position="dodge", width=0.4) + # 绘制Rich factor散点,转换到左侧Y轴的比例范围 geom_point(aes(y=Richfactor / rf_scale), color="darkred", size=3) + coord_flip() + scale_fill_viridis(option="mako") + facet_grid(Pathway~.) + theme(strip.text.y = element_text(angle = 0)) + # 设置双Y轴,右侧对应Rich factor scale_y_continuous( name="#Proteins", sec.axis = sec_axis(~ . * rf_scale, name="Rich factor") ) + # 区分右侧轴的颜色 theme(axis.text.y.right = element_text(color="darkred"), axis.title.y.right = element_text(color="darkred"))
注意:双Y轴需确保比例转换合理,避免数据展示误导,若仅需查看Rich factor数值,方案1更简洁。
内容的提问来源于stack exchange,提问作者Venkata Narasimha Kadali
相关产品推荐
相关产品推荐

