簡體   English   中英

用 geom_jitter 繪制一個 ggplot geom_boxplot,用一個因子分隔,只顯示盒子中值

[英]Plot a ggplot geom_boxplot with geom_jitter, separated by a factor and showing only box median

我有一個帶有兩個factor變量(下面df中的typeage )和一個數字變量(下面df中的value )的data.frame

set.seed(1)
df <- data.frame(type = c(rep("t1", 8), rep("t2", 8), rep("t3", 8), rep("t4", 8), rep("t5", 8), rep("t6", 8)),
                 age = rep(c(rep("y", 4),rep("o", 4)), 6),
                 value = rep(c(runif(4, 5, 10), runif(4, 7.5, 12.5)), 6),
                 stringsAsFactors = F)
df$type <- factor(df$type, levels = c("t1", "t2", "t3", "t4", "t5", "t6"), ordered = T)
df$age <- factor(df$age, levels = c("y", "o"), ordered = T)

我想使用Rggplot2df$value繪制為抖動點,按df$type分組和顏色編碼,但在df$type內由df$age分隔。 此外,我想顯示每組df$typedf$age的中線。

到目前為止,我只能得到沒有中線的點:

library(ggplot2)
ggplot(df, aes(x = age, y = value, color = type)) + 
  geom_jitter(width = 0.3) +
  facet_wrap(~type,nrow = 1) + theme_minimal()

在此處輸入圖像描述

知道如何添加中線嗎?

您的示例數據對於所有類型都是相同的,所以我對其進行了一些更改:

set.seed(1)
df <- data.frame(type = c(rep("t1", 8), rep("t2", 8), rep("t3", 8), rep("t4", 8), rep("t5", 8), rep("t6", 8)),
                 age = rep(c(rep("y", 4),rep("o", 4)), 6),
                 value = runif(48, 5, 10),
                 stringsAsFactors = F)
df$type <- factor(df$type, levels = c("t1", "t2", "t3", "t4", "t5", "t6"), ordered = T)
df$age <- factor(df$age, levels = c("y", "o"), ordered = T)

您可以為此使用stat_summary

ggplot(df) + 
  geom_jitter(aes(x = age, 
                  y = value,
                  color = type,
                  group = age),
              width = 0.2) +
  
  stat_summary(aes(x = age,
                   y = value,
                   color = type,
                   group = interaction(age, type)), 
               fun = median,
               geom = "crossbar") +
  
  scale_color_brewer(palette = "Dark2") +
  
  facet_wrap(~type,nrow = 1) + 
  
  theme_bw()

在此處輸入圖像描述

暫無
暫無

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

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