[英]How to exclude outliers when using geom_boxplot() + geom_jitter() in R
我有一个名为 mpg 的数据集。 我有兴趣绘制一个箱线图(上面有点)来查看变量 drv(传动系统的类型)和 cty(每加仑城市英里数)之间的关系。 下面是我的代码: ggplot(data=mpg,mapping=aes(x=drv,y=cty))+geom_boxplot(outlier.shape = NA)+geom_jitter()
有没有办法从 geom_jitter() 中排除异常值?
您可以使用outlier.shape=NA
隐藏 geom_boxplot 的异常值。 对于 geom_jitter,你可以使用透明度来隐藏异常值,但是这些需要先定义。
mpg %>%
group_by(drv) %>%
mutate(cty.show = as.numeric( # so ggplot doesn't complain about alpha being discrete
between(cty,
quantile(cty)[2] - 1.5*IQR(cty),
quantile(cty)[4] + 1.5*IQR(cty)))) %>%
ggplot(aes(drv, cty)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(aes(alpha=cty.show), show.legend=FALSE) +
scale_alpha_continuous(range = c(0, 1)) # otherwise outliers only partially transparent.
对于第二个 plot,可以根据需要调整 y 限制。
geom_jitter()
没有自行丢弃异常值的论据。 您需要通过定义哪些点是异常值来手动过滤要绘制的数据点。
library(dplyr)
library(ggplot2)
mpg %>%
group_by(drv) %>%
mutate(cty_filtered = case_when(cty - quantile(cty)[4] > 1.5*IQR(cty) ~ NA_real_,
quantile(cty)[2] - cty > 1.5*IQR(cty) ~ NA_real_,
TRUE ~ cty)) %>%
ggplot() + geom_boxplot(aes(drv, cty)) + geom_jitter(aes(drv, cty_filtered))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.