我正在嘗試將 Kruskal Wallis pvalue 添加到我的箱線圖中,雖然我已經看到很多關于該解決方案的帖子,但我無法讓它發揮作用。
這是我的資料和運行箱線圖的代碼:
library(ggplot2)
library(dplyr)
set.seed(1234)
Gene <- floor(runif(25, min=0, max=101))
Age <- floor(runif(25, min=18, max=75))
Group <- c("Group1", "Group1", "Group3", "Group2", "Group1", "Group3", "Group2", "Group2", "Group2", "Group1", "Group1", "Group3", "Group1", "Group2", "Group1", "Group2", "Group3", "Group1", "Group3", "Group3", "Group2", "Group1", "Group3", "Group3","Group2")
df <- data.frame(Gene, Age, Group)
mybreaks <- seq(min(df$Age)-1, to=max(df$Age) 10, by=10)
df$groups_age <- cut(df$Age, breaks = mybreaks, by=10)
bp <- ggplot(df, aes(x=groups_age, y=Gene, group=groups_age))
geom_boxplot(aes(fill=groups_age))
facet_grid(. ~ Group)
bp

在這篇文章中,我看到了一種方法,但是當我嘗試這樣做時,出現此錯誤Error in FUN(X[[i]], ...) : object 'groups_age' not found并且未顯示圖。
代碼:
pv <- df %>%
group_by(Group) %>%
summarize(Kruskal_pvalue = kruskal.test(Gene ~ groups_age)$p.value)
bp <- ggplot(df, aes(x=groups_age, y=Gene, group=groups_age))
geom_boxplot(aes(fill=groups_age))
facet_grid(. ~ Group)
geom_text(data=pv, aes(x=2, y=75, label=paste0("Kruskal-Wallis\n p=",Kruskal_pvalue)))
bp
請注意,我手動放置 x 和 y,只是為了放置值。但是,我想更自動地執行此操作,這取決于基因的值是否發生變化。
有誰知道為什么我會收到該錯誤以及為什么它不起作用?
首先十分感謝
問候
uj5u.com熱心網友回復:
問題是你創造group=groups_age了一種全球審美。所有層都將繼承全域 aes,因此所有層都將查找groups_age在提供給層的資料中呼叫的列。由于 中pv使用的資料geom_text不包含此名稱的列,因此您會收到錯誤訊息。
為了解決您的問題,您可以放棄,group=groups_age因為您的情況不需要它。對于更一般的情況,您必須更具體地制作 alocal或globalaes。此外,每個 geom 都有一個inherits.aes引數(默認為TRUE)以防止全域 aes 被繼承:
library(ggplot2)
bp <- ggplot(df, aes(x = groups_age, y = Gene))
geom_boxplot(aes(fill = groups_age))
facet_grid(. ~ Group)
geom_text(data = pv, aes(x = 2, y = 75, label = paste0("Kruskal-Wallis\n p=", Kruskal_pvalue)))
bp

由reprex 包(v2.0.1)于 2021 年 12 月 21 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/388492.html
標籤:r ggplot2 箱形图 分面网格 克鲁斯卡尔瓦利斯
上一篇:在單詞和數字之間拆分字串
