簡體   English   中英

從 Boxplot 到 ggplot 中的 Barplot 可能嗎?

[英]From Boxplot to Barplot in ggplot possible?

我必須用errorbars Tukey sig做一個 ggplot barplot 用不同肥料濃度種植的植物的字母 數據應該在差異之后分組。 濃度和信號。 應自動添加字母。

我已經有一個代碼來解決同樣的問題,但 Boxplot - 它工作得很好。 我用條形圖嘗試了幾個教程,但我總是遇到問題; stat_count() 只能具有 x 或 y 美學。

所以我想,是否可以將我的箱線圖代碼轉換為條形圖代碼? 我試過了,但我做不到 :) 如果沒有 - 我如何自動添加 tukeyHSD 測試結果 sig。 ggplot 條形圖的字母?

這是我的帶有 tukey 字母的箱線圖代碼:

    value_max = Dünger, group_by(Duenger.g), summarize(max_value = max(Höhe.cm)) 

hsd=HSD.test(aov(Höhe.cm~Duenger.g, data=Dünger), 

trt = "Duenger.g", group = T) sig.letters <- hsd$groups[order(row.names(hsd$groups)), ]



J <- ggplot(Dünger, aes(x = Duenger.g, y = Höhe.cm))+ geom_boxplot(aes(fill= Duenger.g))+ scale_fill_discrete(labels=c("0.5g", '1g', "2g", "3g", "4g"))+ geom_text(data = value_max, aes(x=Duenger.g, y = 0.1 + max_value, label = sig.letters$groups), vjust=0)+ stat_boxplot(geom = 'errorbar', width = 0.1)+ ggtitle("Auswirkung von Dünger auf die Höhe von Pflanzen") + xlab("Dünger in g") + ylab("Höhe in cm"); J

這是它的樣子:

帶 tukey 的箱線圖

來自 dput 的數據:

structure(list(Duenger.g = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 
0.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4), plant = c(1, 2, 3, 4, 5, 7, 10, 11, 12, 13, 14, 18, 19, 
21, 23, 24, 25, 26, 27, 29, 30, 31, 33, 34, 35, 37, 38, 39, 40, 
41, 42, 43, 44, 48, 49, 50, 53, 54, 55, 56, 57, 58, 61, 62, 64, 
65, 66, 67, 68, 69, 70, 71, 72, 73, 75, 79, 80, 81, 83, 85, 86, 
88, 89, 91, 93, 99, 100, 102, 103, 104, 105, 106, 107, 108, 110, 
111, 112, 113, 114, 115, 116, 117, 118, 120, 122, 123, 125, 126, 
127, 128, 130, 131, 132, 134, 136, 138, 139, 140, 141, 143, 144, 
145, 146, 147, 149), height.cm = c(5.7, 2.8, 5.5, 8, 3.5, 2.5, 
4, 6, 10, 4.5, 7, 8.3, 11, 7, 8, 2.5, 7.4, 3, 14.5, 7, 12, 7.5, 
30.5, 27, 6.5, 19, 10.4, 12.7, 27.3, 11, 11, 10.5, 10.5, 13, 
53, 12.5, 12, 6, 12, 35, 8, 16, 56, 63, 69, 62, 98, 65, 77, 32, 
85, 75, 33.7, 75, 55, 38.8, 39, 46, 35, 59, 44, 31.5, 49, 34, 
52, 37, 43, 38, 28, 14, 28, 19, 20, 23, 17.5, 32, 16, 17, 24.7, 
34, 50, 12, 14, 21, 33, 39.3, 41, 29, 35, 48, 40, 65, 35, 10, 
26, 34, 41, 32, 38, 23.5, 22.2, 20.5, 29, 34, 45)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -105L))

謝謝未來

條形圖和箱線圖是兩種不同的東西。 默認情況下geom_boxplot默認計算箱線圖統計數據 ( stat="boxplot" )。 相比之下,當您使用geom_bar時,它默認會計算觀察的數量 ( stat="count" ),然后將其映射到y上。 這就是您收到錯誤的原因。 因此,簡單地用geom_boxplot geom_bar給你想要的結果。 相反,您可以使用例如stat_summary來創建帶有錯誤欄的條形圖。 此外,我創建了一個摘要數據集以在誤差條的頂部添加標簽。

library(ggplot2)
library(dplyr)
library(agricolae)

Dünger <- Dünger |>
  rename("Höhe.cm" = height.cm) |>
  mutate(Duenger.g = factor(Duenger.g))

hsd <- HSD.test(aov(Höhe.cm ~ Duenger.g, data = Dünger), trt = "Duenger.g", group = T)
sig.letters <- hsd$groups %>% mutate(Duenger.g = row.names(.))

duenger_sum <- Dünger |>
  group_by(Duenger.g) |>
  summarize(mean_se(Höhe.cm)) |>
  left_join(sig.letters, by = "Duenger.g")

ggplot(Dünger, aes(x = Duenger.g, y = Höhe.cm, fill = Duenger.g)) +
  stat_summary(geom = "bar", fun = "mean") +
  stat_summary(geom = "errorbar", width = .1) +
  scale_fill_discrete(labels = c("0.5g", "1g", "2g", "3g", "4g")) +
  geom_text(data = duenger_sum, aes(y = ymax, label = groups), vjust = 0, nudge_y = 1) +
  labs(
    title = "Auswirkung von Dünger auf die Höhe von Pflanzen",
    x = "Dünger in g", y = "Höhe in cm"
  )
#> No summary function supplied, defaulting to `mean_se()`

但是由於匯總數據集現在已經包含誤差線的均值和值,因此第二個選擇是:

ggplot(duenger_sum, aes(x = Duenger.g, y = y, fill = Duenger.g)) +
  geom_col() +
  geom_errorbar(aes(ymin = ymin, ymax = ymax), width = .1) +
  scale_fill_discrete(labels = c("0.5g", "1g", "2g", "3g", "4g")) +
  geom_text(aes(y = ymax, label = groups), vjust = 0, nudge_y = 1) +
  labs(
    title = "Auswirkung von Dünger auf die Höhe von Pflanzen",
    x = "Dünger in g", y = "Höhe in cm"
  )

暫無
暫無

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

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