R 盒形图,使用 "stat_compare_means" 更改 p 值中的数字位数。

6
使用内置于R中的ToothGrowth数据集,我使用了以下代码。
library(ggplot2)
library(tidyverse)
library(ggpubr)
p <- ggboxplot(ToothGrowth, x = "supp", y = "len",
           color = "supp", palette = "jco",
           add = "jitter",
           facet.by = "dose", short.panel.labs = FALSE)
p + stat_compare_means(label = "p.format")

现在,我希望p值有4位数。我研究了之前的类似帖子,然后尝试了以下两个选项。
p + stat_compare_means(label = "p.format", digits = 4)
p + stat_compare_means(label = "p.format", round(p.format, 4))

很遗憾,这两个方法都没有奏效。是否有人能提供解决方案呢?谢谢。

ggboxplotstat_compare_means来自哪里?请始终明确包含对外部非基本R软件包的library调用。 - Maurits Evers
1
@MauritsEvers 对此表示歉意。我已将它们添加在上面。希望有所帮助?谢谢。 - Sylvia Rodriguez
1个回答

5

这里是使用sprintf的一个选项

library(ggplot2)
library(tidyverse)
library(ggpubr)
p <- ggboxplot(ToothGrowth, x = "supp", y = "len",
           color = "supp", palette = "jco",
           add = "jitter",
           facet.by = "dose", short.panel.labs = FALSE)
p + stat_compare_means(aes(label = sprintf("p = %5.4f", as.numeric(..p.format..))))

enter image description here


更新

针对您的评论,您可以执行以下操作:

p <- ggboxplot(ToothGrowth, x = "supp", y = "len",
           color = "supp", palette = "jco",
           add = "jitter",
           facet.by = "dose", short.panel.labs = FALSE)
p + stat_compare_means(aes(label = ifelse(
    p < 1.e-2,
    sprintf("p = %2.1e", as.numeric(..p.format..)),
    sprintf("p = %5.4f", as.numeric(..p.format..)))))

enter image description here

如果 p < 1.e-2,则使用科学计数法打印 p 值,否则使用四位小数的浮点数。


1
谢谢。太棒了,正是我在寻找的东西。不过,不幸的是,我要将其应用于一个大型数据集,一些p值例如为2.3e-08。是否有办法将p=0.023更改为p=0.0230,如上所述,但也保留p=2.3e-08?对于额外的麻烦,我很抱歉。谢谢。 - Sylvia Rodriguez
2
@SylviaRodriguez 当然可以, 请看我上面的更新。 - Maurits Evers
1
太棒了!谢谢你,Maurits。这正是我所期望的。 - Sylvia Rodriguez
1
非常抱歉,我还有一个问题。我的一些p值是“<2e-16”。如果我使用这段代码,它们会显示为“NA”,而不是“<2e-16”。请问您是否也能解决这个问题?谢谢。 - Sylvia Rodriguez
2
哦,我自己解决了:p + stat_compare_means(aes(label = ifelse( p < 2.e-16, p.format, ifelse( p < 1.e-2, sprintf("p = %2.1e", as.numeric(..p.format..)), sprintf("p = %5.4f", as.numeric(..p.format..)))))) - Sylvia Rodriguez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接