您知道如何将抖动仅应用于箱线图的异常值数据吗?这是代码:
ggplot(data = a, aes(x = "", y = a$V8)) +
geom_boxplot(outlier.size = 0.5)+
geom_point(data=a, aes(x="", y=a$V8[54]), colour="red", size=3) +
theme_bw()+
coord_flip()
谢谢你!!
向您的数据集添加了一个向量,以指示哪些点是异常值,哪些不是异常值。然后,将 设置geom_boxplot
为不绘制任何异常值并使用 ageom_point
显式绘制异常值。
我将使用来自的diamonds
数据集ggplot2
来说明。
library(ggplot2)
library(dplyr)
diamonds2 <-
diamonds %>%
group_by(cut) %>%
mutate(outlier = price > median(price) + IQR(price) * 1.5) %>%
ungroup
ggplot(diamonds2) +
aes(x = cut, y = price) +
geom_boxplot(outlier.shape = NA) + # NO OUTLIERS
geom_point(data = function(x) dplyr::filter_(x, ~ outlier), position = 'jitter') # Outliers
这与上面的方法略有不同(为非异常值分配带有 NA 的颜色变量),并且包括对上限和下限计算的校正。
默认的“离群值”定义是超过 25/75 四分位数 +/- 1.5 x 四分位数范围 (IQR) 的点。
生成一些示例数据:
set.seed(1)
a <- data_frame(x= factor(rep(1:4, each = 1000)),
V8 = c(rnorm(1000, 25, 4),
rnorm(1000, 50, 4),
rnorm(1000, 75, 4),
rnorm(1000, 100, 4)))
计算上限/下限异常值(使用 dplyr/tidyverse 函数):
library(tidyverse)
a <- a %>% group_by(x) %>%
mutate(outlier.high = V8 > quantile(V8, .75) + 1.50*IQR(V8),
outlier.low = V8 < quantile(V8, .25) - 1.50*IQR(V8))
定义上/下点的颜色:
a <- a %>% mutate(outlier.color = case_when(outlier.high ~ "red",
outlier.low ~ "steelblue"))
未分类的案例将被编码为颜色的“NA”,并且不会出现在图中。
该dplyr::case_when()
功能还不是完全稳定的(可能需要 github 开发版本 > 0.5 在此处输入链接描述),所以如果这不起作用,这里是一个基本的替代方案:
a$outlier.color <- NA
a$outlier.color[a$outlier.high] <- "red"
a$outlier.color[a$outlier.low] <- "steelblue"
阴谋:
a %>% ggplot(aes(x, V8)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(color = a$outlier.color, width = .2) + # NA not plotted
theme_bw() + coord_flip()