R语言 如何使用ggplot2在箱线图上显示“野值”的不同图标?

dgtucam1  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(177)

我想制作一个箱形图,其中野值离群值标记为唯一图标,如星号#8。“野值离群值”定义为大于数据集Q3 + 3 * IQR或小于Q1 - 3 * IQR的单个点。
我已经看到了一些人的答案,他们想用自己的值来标记他们的离群值(例如Labeling Outliers of Boxplots in R),geom_boxplot()内置了一种方法来修改所有离群值的样式,但我还没有找到任何方法来修改一些离群点。
对于这个MRE,我希望能够有这些野生离群值为8缸标有星号,而其他离群值是用通常的填充点标记。

library(ggplot2)

ggplot(data = mtcars,aes(x=cyl,y=drat,group=cyl))+
  geom_boxplot()

以下是获取“外部围栏”的方法,超出该围栏的点将被视为野值异常值:

mtcars%>%group_by(cyl)%>%summarize(lf=quantile(drat,probs=.25)-3*IQR(drat),uf=quantile(drat,probs=.75)+3*IQR(drat))

谢谢大家!

d7v8vwbk

d7v8vwbk1#

一种选择是创建两个包含野生值和其他离群值的单独 Dataframe ,并通过两个geom_point将其添加到箱线图中。

library(ggplot2)
library(dplyr, warn = FALSE)

wild_outliers <- mtcars %>%
  group_by(cyl) %>%
  filter(drat < quantile(drat, probs = .25) - 3 * IQR(drat) |
    drat > quantile(drat, probs = .75) + 3 * IQR(drat))

outliers <- mtcars %>%
  group_by(cyl) %>%
  filter(drat < quantile(drat, probs = .25) - 1.5 * IQR(drat) |
    drat > quantile(drat, probs = .75) + 1.5 * IQR(drat)) |>
  anti_join(wild_outliers)
#> Joining, by = c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am",
#> "gear", "carb")

ggplot(data = mtcars, aes(x = cyl, y = drat, group = cyl)) +
  geom_boxplot(outlier.colour = NA) +
  geom_point(data = outliers, shape = 16, size = 2) +
  geom_point(data = wild_outliers, shape = "*", size = 8)

相关问题