在批量绘制箱型图时,使用自定义的函数,出现了不能比较统计学差异的问题。
具体问题
数据特征
数据是行是样本,列是临床特征+基因表达
想要绘制不同临床特征中,基因表达箱型图
写一个画箱型图的函数
myboxplot <- function(gene, phenotype){
ggboxplot(
data, x = phenotype, y = gene,
palette = "npg",fill = phenotype,
bxp.errorbar = T, bxp.errorbar.width = 0.2,outlier.shape = NA
)+
xlab(label = 'Group')+
ylab(label = paste(gene, ' Expression', sep = '\t'))+
rotate_x_text(angle = 45)+
stat_compare_means(aes(group = phenotype),
label = "p.format",label.x =2, size = 2)+
theme(title = element_text(size = 18, color = "black", face = "bold"),
plot.title = element_text(hjust = 0.5,vjust = 0.5),
axis.text = element_text(size = 10, color = "black", face = "bold", vjust = 0.5, hjust = 0.5),
axis.line = element_line(size = 0.8),
legend.title = element_text(size = 9)
)
}
使用函数画图
myboxplot(gene = "IGF2BP2", phenotype = "grade")
遇到的问题和错误
图能够出来,但是会报错
> myboxplot(gene = "IGF2BP2", phenotype = "grade")
Warning messages:
1: Ignoring unknown aesthetics: fill
2: Unknown or uninitialised column: `p`.
3: Computation failed in `stat_compare_means()`:
argument "x" is missing, with no default
主要意思就是stat_compare_means()
出现错误
根据报错内容看,主要是在stat_compare_means()
函数中,不能识别最先给与自定义函数的内容
问题解决
改变名称的类型
既然不能识别,那么就把字符串改成向量,或者其他什么不带引号的样子
这个时候使用as.name
,as.symbol
这两个函数,确实可以把引号去掉,但是带入其中依然不能解决问题
查看文档
有问题的时候,一直不能很好的解决,那么查看文档,看看这个函数作者到底怎么处理的,或者标准是什么样子。
查看文档的小技巧:光标点到函数位置,按
F1
键就可以弹出文档
这个时候,发现自己画蛇添足了。
文档中的例子是
# Add p-value
p + stat_compare_means()
# Change method
p + stat_compare_means(method = "t.test")
不需要在stat_compare_means
函数中加需要比较的,因为上面已经进行了定义。
这个画图函数是从个人的这篇帖子摘过来的批量处理——for循环画图,
也不知道自己当时是怎么写的这个函数,或者说这个函数在那篇当中是正确的吧
修改函数
myboxplot <- function(gene, phenotype){
ggboxplot(
data, x = phenotype, y = gene,
palette = "npg",fill = phenotype,
bxp.errorbar = T, bxp.errorbar.width = 0.2,outlier.shape = NA
)+
xlab(label = 'Group')+
ylab(label = paste(gene, ' Expression', sep = '\t'))+
rotate_x_text(angle = 45)+
stat_compare_means(
label = "p.format",label.x.npc = 0.35, size = 3)+
theme(title = element_text(size = 18, color = "black", face = "bold"),
plot.title = element_text(hjust = 0.5,vjust = 0.5),
axis.text = element_text(size = 10, color = "black", face = "bold", vjust = 0.5, hjust = 0.5),
axis.line = element_line(size = 0.8),
legend.title = element_text(size = 9)
)
}
myboxplot(gene = "IGF2BP3", phenotype = "grade")
修改后,顺利出图,P值出现
看来需要把绘制这个图形的函数再修改一下,使其能够更泛化,适应范围更广