簡體   English   中英

如何使用 function 在 geom_boxplot 中放置文本

[英]How to use a function to place text in geom_boxplot

我正在研究一些箱線圖。 這是一個工作示例:

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 (對我來說看起來正確)將白色文本放置在每個箱線圖中(即,而不是當前的垂直 position 參數: y = mpg + 0.05 )。 有沒有辦法告訴 R 選擇我為垂直 position 為每個組計算的兩個值之間的中間點?

最簡單的方法可能是在創建mpglims時再添加一個變量:

mpglims <- mtcars %>% group_by(cyl) %>% 
        summarize(q50 = quantile(mpg, probs = 0.50), 
                  q75 = quantile(mpg, probs = 0.75),
                  mid = (q50 + q75)/ 2)

geom_text()調用中使用mid in y = mid

如果您想使用您在第一個數據幀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 

將 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")

在此處輸入圖像描述

暫無
暫無

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

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