0%

R-隐藏boxplot的离群值

问题描述

在使用boxplot描述数据时,离群值的存在会干扰boxplot可视化的结果。

解决方法

在网上找到的解决方法为设置geom_boxplot(outlier.shape = NA),并使用coord_cartesian()函数进行y轴的缩放。下面有一组随机数展示

1
2
3
4
5
6
7
8
9
10
11
12
13
library(tidyverse)
library(patchwork)
set.seed(123)
# 生成随机数及离群值
df <- data.frame(y = c(-100, rnorm(100), 100))
p0 <- ggplot(df, aes(y = y)) + geom_boxplot(aes(x = factor(1))) + ggtitle('Orignial')
p1 <- ggplot(df, aes(y = y)) + geom_boxplot(aes(x = factor(1)), outlier.shape = NA) + ggtitle('outlier.shape=NA')
# 计算下、上四分位数
ylim1 <- boxplot.stats(df$y)$stats[c(1, 5)]
# 通过coord_cartesian() 缩放y轴坐标
p2 <- p1 + coord_cartesian(ylim = ylim1*1.05) + ggtitle('coord_cartesian()')
p0 + p1 + p2

这样的好处在于我们并没有舍去离群值,而是将离群值隐藏起来,并通过对y轴的缩放获得更好的可视化结果。例如,如果直接使用ylim()函数来调整y轴的范围则是直接移除离群值。

Ref:
https://stackoverflow.com/questions/5677885/ignore-outliers-in-ggplot2-boxplot

完。