簡體   English   中英

如何在指數(log10)y軸上的箱線圖上方顯示p值?

[英]How to display p-values above boxplots on exponential (log10) y-axis?

我有一個包含三組(group1、group2、group3)的數據框。 我想在ggplot2中顯示它們的平均比較的 p 值,但是我可以這樣做,但是這些值相互疊加,很難看到正在比較的內容。 當我嘗試使用y_position() function 調整 p 值的位置時,箱線圖崩潰(我認為是因為 y 軸是 log10),但 p 值不再堆疊在一起。 如何防止箱線圖折疊並保持顯示 p 值,以便您可以看到正在比較的內容?

示例數據

library(ggplot2)
library(dplyr)
library(ggsignif)

df <- data.frame(matrix(ncol = 2, nrow = 30))
colnames(df)[1:2] <- c("group", "value")
df$group <- rep(c("group1","group2","group3"), each = 10)
df[1:10,2] <- rexp(10, 1/10)
df[11:20,2] <- rexp(10, 1/100)
df[21:30,2] <- rexp(10, 1/900)

# Need to say what should be compared for p-value determination

my_comparisons <- list(c("group1", "group2"),
                       c("group1", "group3"),
                       c("group2", "group3"))

顯示每個組的value分布的箱線圖,但是 p 值彼此重疊,因此您無法在組之間進行比較。

df %>%
  mutate(group = factor(group, levels = c("group3","group2","group1"))) %>%
  ggplot(aes(x = group, y = value)) +
  geom_signif(comparisons = my_comparisons,
              map_signif_level = function(x) paste("p =", scales::pvalue(x))) +
  scale_y_log10() +
  geom_boxplot(outlier.colour="white", outlier.fill = "white", outlier.shape = 1, outlier.size = 0) +
  geom_jitter(shape=1, position=position_jitter(0.2), color = "black", fill = "white", size = 2) +
  labs(x = "",
       y = "value") +
  theme_bw() +
  theme(axis.text.x = element_text(size = 16, color = "black"),
        axis.text.y = element_text(size = 16, color = "black"),
        axis.title = element_text(size = 16, color = "black"),
        axis.title.x = element_text(vjust = -0.5),
        panel.grid = element_blank(),
        panel.background = element_blank())

調整應顯示 p 值的位置的y_position() ,但這會折疊 y 軸。 我在y_position中嘗試了幾個值。

df %>%
  mutate(group = factor(group, levels = c("group3","group2","group1"))) %>%
  ggplot(aes(x = group, y = value)) +
  geom_signif(y_position = c(2000,1800,1600),
              comparisons = my_comparisons,
              map_signif_level = function(x) paste("p =", scales::pvalue(x))) +
  scale_y_log10() +
  geom_boxplot(outlier.colour="white", outlier.fill = "white", outlier.shape = 1, outlier.size = 0) +
  geom_jitter(shape=1, position=position_jitter(0.2), color = "black", fill = "white", size = 2) +
  labs(x = "",
       y = "value") +
  theme_bw() +
  theme(axis.text.x = element_text(size = 16, color = "black"),
        axis.text.y = element_text(size = 16, color = "black"),
        axis.title = element_text(size = 16, color = "black"),
        axis.title.x = element_text(vjust = -0.5),
        panel.grid = element_blank(),
        panel.background = element_blank())

由於某種原因,此參數忽略了軸變換。 因此,您需要使用所需位置的 log10 值:


df %>%
  mutate(group = factor(group, levels = c("group3","group2","group1"))) %>%
  ggplot(aes(x = group, y = value)) +
  geom_signif(comparisons = my_comparisons,
              y_position = log10(c(5000, 10000, 25000)),
              map_signif_level = function(x) paste("p =", scales::pvalue(x))) +
  scale_y_log10() +
  geom_boxplot(outlier.colour="white", outlier.fill = "white", 
               -outlier.shape = 1, outlier.size = 0) +
  geom_jitter(shape=1, position=position_jitter(0.2), color = "black", 
              fill = "white", size = 2) +
  labs(x = "",
       y = "value") +
  theme_bw() +
  theme(axis.text.x = element_text(size = 16, color = "black"),
        axis.text.y = element_text(size = 16, color = "black"),
        axis.title = element_text(size = 16, color = "black"),
        axis.title.x = element_text(vjust = -0.5),
        panel.grid = element_blank(),
        panel.background = element_blank())

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM