gpt4 book ai didi

r - ggplot2 - 一个分面图不显示 stat_compare_means Kruskal

转载 作者:行者123 更新时间:2023-12-04 11:01:53 25 4
gpt4 key购买 nike

您好,当我尝试绘制此代码时:

ggplot(subset(tabcourt, !is.na(Score) & !is.na(`PSA level (ng/ml)`)))
+facet_wrap(.~Method,scales='free')
+aes(x =Score, y =`PSA level (ng/ml)`,color=Method)
+stat_compare_means(show.legend=FALSE,label.x.npc = 0.5,label.y.npc = 0.93,color="black",size=4)
+geom_boxplot()+theme_bw()

它没有在中间的情节上显示 Kruskal Wallis,我尽我所能,但似乎没有解决方案,关于如何解决这个问题的任何想法?
Plot description

编辑:当把 free_y 而不是 free 它修复了错误但 x 轴是坏的(每个 1 到 30)

这是数据的头部和 str :
Head description
Head description

最佳答案

我认为您的错误可能来自您如何将数据包装到 ggplot 中,也可能来自您的数据本身。

我没有你的数据样本,所以我使用了样本数据库 Toothgrowth以及您的 stat_compare_mean 代码,我得到了你正在寻找的显示器。

这是我的代码:

library(ggpubr)
data("ToothGrowth")

# Box plot faceted by "dose"
p <- ggboxplot(ToothGrowth, x = "supp", y = "len",
color = "supp", palette = "jco",
add = "jitter",
facet.by = "dose", short.panel.labs = FALSE)
# Adding stat_compare_means
p + stat_compare_means(show.legend=FALSE, label.x.npc = 0.5,
label.y.npc = 0.93, color = "black", size = 4) + theme_bw()

这是情节:

enter image description here

如果你改用它,你会有更好的绘图:

p + stat_compare_means() + theme_bw()

enter image description here

更新:显示最终图的技巧

因此,我尝试重现您的数据以重现您得到的绘图错误,并且我成功地使用本文中描述的技巧绘制了 p 值: R: ggplot2 - Kruskal-Wallis test per facet

这是我用来模仿您的数据的代码:

set.seed(1)
# defining the sample dataset AJCC
PSA_levels <- rnorm(100,mean = 2, sd = 2)
AJCC_data <- data.frame(cbind(PSA_levels))
x <- NULL
for(i in 1:100) {x <- c(x,sample(1:4,1))}
AJCC_data$score <- x
AJCC_data$Method <- 'AJCC'

# defining the sample dataset Gleason
PSA_levels <- rnorm(100,mean = 2.5, sd = 1)
Gleason_data <- data.frame(cbind(PSA_levels))
x <- NULL
for(i in 1:100) {x <- c(x,sample(5:10,1))}
Gleason_data$score <- x
Gleason_data$Method <- 'Gleason'

# defining the sample dataset TNM
PSA_levels <- rnorm(100,mean = 2.5, sd = 1)
TNM_data <- data.frame(cbind(PSA_levels))
x <- NULL
for(i in 1:100) {x <- c(x,sample(1:30,1))}
TNM_data$score <- x
TNM_data$Method <- 'TNM'

df <- rbind(AJCC_data, Gleason_data, TNM_data)
df$score <- as.factor(df$score)

这是 df 的输出,它看起来与您的数据 tabcourt 相似

> str(df)
'data.frame': 300 obs. of 3 variables:
$ PSA_levels: num 0.747 2.367 0.329 5.191 2.659 ...
$ score : Factor w/ 30 levels "1","2","3","4",..: 2 1 2 2 2 3 1 2 3 3 ...
$ Method : chr "AJCC" "AJCC" "AJCC" "AJCC" ...

然后,我尝试重现您的箱线图多面:

library(ggplot2)
library(ggpubr)
g <- ggplot(df, aes(x = score, y = PSA_levels, color = Method))
p <- g + facet_wrap(.~Method, scales = 'free_x')
p <- p + geom_boxplot()
p <- p + theme_bw()

当我尝试使用 stat_compare_means 在图表上添加 p 值时函数,我得到和你一样的绘图错误。所以,根据上面引用的帖子,我使用了包 dplyr为每个组生成 Kruskal Wallis 检验的 pvalue。

library(dplyr)
ptest <- df %>% group_by(Method) %>% summarize(p.value = kruskal.test(PSA_levels ~score)$p.value)

这是 ptest 的输出:

> ptest
# A tibble: 3 x 2
Method p.value
<chr> <dbl>
1 AJCC 0.575
2 Gleason 0.216
3 TNM 0.226

现在,我可以通过执行以下操作来添加箱线图:

p + geom_text(data = ptest, aes(x =  c(2,3,10), y = c(6,6,6), label = paste0("Kruskal-Wallis\n p=",round(p.value,3))))

在这里,你会得到什么:
enter image description here

所以,我认为是因为 stat_compare_means不明白要比较哪个组以及如何在图表上表示所有统计比较。从 ggplot 做测试然后添加为 geom_text论证解决问题。

希望它适用于您的真实数据!

关于r - ggplot2 - 一个分面图不显示 stat_compare_means Kruskal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58758281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com