我正在研究一些箱線圖。這是一個作業示例:
data(mtcars)
# Compute means for each group
mpgmn <- aggregate(mpg ~ cyl, mtcars, mean)
mpgmn$mpg <- round(mpgmn$mpg, 2)
# Same thing for 50th and 75th %tiles
mpglims <- mtcars %>% group_by(cyl) %>%
summarize(q50 = quantile(mpg, probs = 0.50),
q75 = quantile(mpg, probs = 0.75))
# Plot
library(ggplot2)
g <- ggplot(mtcars, aes(x = as.factor(cyl), y = mpg,
fill = as.factor(cyl)))
g <- g geom_boxplot()
g <- g stat_summary(fun = mean, color = "white", geom = "point",
shape = 18, size = 3, show.legend = FALSE)
g <- g geom_text(data = mpgmn,
aes(label = paste("mean = ", mpg),
y = mpg 0.5), color = "white")
g
所有這些都有效。但是,我想使用mpglims我計算的(對我來說看起來正確)將白色文本放置在每個箱線圖中(即,而不是當前的垂直位置引數:)y = mpg 0.05。有沒有辦法告訴 R 選擇我為每個組計算的垂直位置的兩個值之間的中間點?
uj5u.com熱心網友回復:
把 Kat 已經提供的所有資訊(這個答案應該是公認的)和 OP 放在一起,這是一種可能的tidyverse方法:
library(tidyverse)
mtcars %>%
select(cyl, mpg) %>%
group_by(cyl = as.factor(cyl)) %>%
mutate(mpg_mean = round(mean(mpg, na.rm = TRUE),2)) %>%
mutate(q50 = quantile(mpg, probs = 0.50),
q75 = quantile(mpg, probs = 0.75)) %>%
mutate(mid = (q50 q75)/ 2) %>%
ggplot(aes(x = cyl, y = mpg, fill = cyl))
geom_boxplot()
stat_summary(fun = mean, color = "white", geom = "point",
shape = 18, size = 3, show.legend = FALSE)
geom_text(aes(label = paste("mean = ", mpg_mean),
y = mid), color = "white")

uj5u.com熱心網友回復:
最簡單的方法可能是在創建的程序中再添加一個變數mpglims:
mpglims <- mtcars %>% group_by(cyl) %>%
summarize(q50 = quantile(mpg, probs = 0.50),
q75 = quantile(mpg, probs = 0.75),
mid = (q50 q75)/ 2)
使用mid中y = mid的geom_text()呼叫。
如果您想使用您在第一個資料框中計算的內容mpgmn,請讓自己更輕松一些并將其添加到mpglims,以及:
mpglims <- mtcars %>% group_by(cyl) %>%
summarize(q50 = quantile(mpg, probs = 0.50),
q75 = quantile(mpg, probs = 0.75),
mid = (q50 q75)/ 2,
mmpg = mean(mpg) %>% round(., digits = 2))
它創建與您的aggregate()呼叫相同的東西。看看這個:
mpglims[, 5] %>% unlist()
# mmpg1 mmpg2 mmpg3
# 26.66 19.74 15.10
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/403259.html
標籤:
