R语言EnhancedVolcano绘制火山图设置p=0.05截断线报错求解
问题原因
- 语法报错:R中科学计数法格式要求
e后的指数必须是整数,你写的10e-2.5在e后使用小数指数,不符合R的数值书写规则,因此触发数值常量错误。 - 截断线位置偏差:你之前设置的
pCutoff = 10e-2实际对应的p值是0.1,经火山图默认的-log10(p)转换后y轴位置为1,和你需要的y=1.3位置不匹配,因此线的位置不对。
解决方案
EnhancedVolcano的y轴默认对输入的p值做-log10()转换,你需要的y=1.3位置对应的原始校正p值为10^(-1.3)(约为0.05,正好对应常用的p=0.05阈值),直接通过指数运算计算该值传给pCutoff参数即可,不需要硬写不符合语法的科学计数法:
library(EnhancedVolcano) # 读取示例数据 all_genes <- structure(list(X = 1:14, Gene.ID = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"), logFC = c(1.5, 0.17212922, 0.145542174, 0.304348578, 0.124636936, 0.247841044, 0.160818268, 0.123741518, 0.148530876, 0.148960225, 0.114135472, -0.147118359, 0.095549291, 0.138521594), AveExpr = c(5.426424957, 4.289728233, 4.901134193, 4.742864705, 5.447030699, 4.539641767, 4.650750102, 5.901020922, 5.365944907, 5.818788787, 4.837214384, 7.017656548, 4.531897822, 5.192294452), t = c(6.15098624, 5.452898247, 4.979246654, 4.949519834, 4.818043279, 4.73403717, 4.701937811, 4.522692175, 4.518518374, 4.281900066, 4.247981727, -4.194421592, 4.10350597, 4.088357671), p.value = c(1.27e-09, 6.8e-08, 7.99e-07, 9.26e-07, 1.77e-06, 2.65e-06, 3.09e-06, 7.13e-06, 7.27e-06, 2.1e-05, 2.44e-05, 3.07e-05, 4.53e-05, 4.83e-05), adjust.p.value = c(1.64e-05, 0.000438854, 0.002987004, 0.002987004, 0.004558267, 0.005687325, 0.005687325, 0.010422933, 0.010422933, 0.027128901, 0.028601707, 0.033061438, 0.04452146, 0.04452146), B = c(11.2786109, 7.664706936, 5.439886439, 5.306497286, 4.725465519, 4.361868581, 4.224515919, 3.473656504, 3.45649938, 2.508304771, 2.376338878, 2.169980059, 1.825392322, 1.76867543)), class = "data.frame", row.names = c(NA, -14L)) # 绘制火山图,p值截断线精准对应y=1.3位置 EnhancedVolcano(all_genes, x = "logFC", y = "adjust.p.value", lab = all_genes$Gene.ID, pCutoff = 10^(-1.3), FCcutoff = 1)
如果需要自定义截断线的样式(比如颜色、线型),也可以在绘图代码末尾叠加ggplot2图层手动添加横线,位置完全精准可控:
EnhancedVolcano(all_genes, x = "logFC", y = "adjust.p.value", lab = all_genes$Gene.ID, pCutoff = 10^(-1.3), FCcutoff = 1) + # 手动叠加y=1.3位置的水平红色虚线 geom_hline(yintercept = 1.3, linetype = "dashed", colour = "red", linewidth = 1)
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

