有没有办法只在箱线图上显示高于/低于特定范围的单个数据点的点?

问题描述 投票:0回答:1

我想为我的数据创建一个箱线图,其中箱线图本身代表 IQR,胡须代表第 5 个到第 95 个百分位值。我想使用 geom_dotplot 仅显示位于胡须上方或下方的各个数据点(即低于第 5 个百分位数或高于第 95 个百分位数)。有没有办法在 R 中使用 ggplot 来做到这一点?

what i have right now

我不希望箱线图中的点可见,只希望胡须上方/下方的点可见。

r ggplot2 boxplot dot-plot
1个回答
1
投票

您可以使用

stat = "identity"
内的
geom_boxplot
将晶须和铰链的值设置为您喜欢的值。只需使用
quantile
预先计算您想要的值。过滤数据集以为点创建第二个小数据框。

您没有提供可重现的示例,因此我假设您的数据框具有名为“x”和“y”的列。这是一个可重现的数据集来演示:

set.seed(1)
df <- data.frame(x = c("A", "B"), y = rnorm(100, 4.5, 2))

现在我们可以做:

library(tidyverse)

box <- df %>%
  group_by(x) %>%
  summarise(mn = quantile(y, 0.05), 
            low = quantile(y, 0.25),
            mid = median(y),
            up = quantile(y, 0.75),
            mx = quantile(y, 0.95))

points <- df %>%
  group_by(x) %>%
  mutate(lo = quantile(y, 0.05), hi = quantile(y, 0.95)) %>%
  filter(y < lo | y > hi)
  
ggplot(box, aes(x, fill = x)) +
  geom_boxplot(aes(ymin = mn, lower = low, middle = mid, upper = up, ymax = mx),
               stat = "identity", width = 0.5) +
  geom_point(aes(y = y), data = points) +
  scale_fill_manual(values = c("gray90", "gray75"), guide = "none") +
  theme_classic(20)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.