我想为我的数据创建一个箱线图,其中箱线图本身代表 IQR,胡须代表第 5 个到第 95 个百分位值。我想使用 geom_dotplot 仅显示位于胡须上方或下方的各个数据点(即低于第 5 个百分位数或高于第 95 个百分位数)。有没有办法在 R 中使用 ggplot 来做到这一点?
我不希望箱线图中的点可见,只希望胡须上方/下方的点可见。
您可以使用
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)