将中线添加到多面ggplots

Adding median lines to faceted ggplots

我正在绘制一个图,在其中比较多个站点(方面)的两组(x 变量)的值(y 变量)。使用 ggplot,我已经能够根据分面变量(在本例中为站点)对图进行分面并显示我的数据,但无法确定如何向每个组添加一条线段以指示该组的中值.

可重现的例子:

library(tidyverse)

df <- diamonds %>%
  filter(color == "D" | color == "E") %>%
  filter(carat > 1)

p <- ggplot(data=df, aes(x = color, y=carat, fill=color)) +
  geom_jitter(shape = 21, col="black") +
  facet_wrap(~ cut, ncol = 5)

p

输出:

我想输出的内容类似于以下内容(注意,实际上并未在中位数处绘制线条):

您可以执行以下操作:创建一个单独的数据框,在其中按组汇总并计算每个组内的中位数。之后,您可以将 geom_hline() 添加到您的绘图中,并正确指定 yintercept 美学:

library(tidyverse)

df <- diamonds %>%
  filter(color == "D" | color == "E") %>%
  filter(carat > 1)

df_median <- df %>% group_by(cut) %>%
  summarise(median_carat = median(carat))


p <- ggplot(data=df, aes(x = color, y=carat, fill=color)) +
  geom_jitter(shape = 21, col="black") +
  geom_hline(data = df_median, aes(yintercept = median_carat), size = 2, color = "red")+
  facet_wrap(~ cut, ncol = 5)

也许是这样:

p + stat_summary(fun = "median", fun.min = "median", fun.max= "median", size= 0.3, geom = "crossbar")

看这里 ggplot2: add line for average per group