在boxplot中显示轴范围外的值的数量(使用R中的ggplot2)

时间:2017-07-26 19:12:49

标签: r ggplot2 graphics boxplot truncate

有时您希望将绘图的轴范围限制在感兴趣的区域,以便强调某些特征(例如,中位数和四分位数的位置)。然而,可能有必要明确有多少/多少比例的值位于(截断的)轴范围之外。

我试图在R中使用ggplot2时显示这一点,并且我想知道在ggplot2中是否有一些构建方式(或者你可能已经使用了一些明智的解决方案)。我实际上并没有特别坚持任何特定的显示方式(例如在绘图边缘有不同符号的抖动点,外面有一个小小的条,这取决于它的显示范围外的比例,某种其他类型显示以某种方式传达信息)。

下面是一些示例代码,它创建了一些模拟数据和我想到的那种情节(在代码下方显示),但没有任何明确的指示,确切地说有多少数据在y轴范围之外。

library(ggplot2)
set.seed(seed=123)
group <- rep(c(0,1),each=500)
y <- rcauchy(1000, group, 10)
mockdata <- data.frame(group,y)

ggplot(mockdata, aes(factor(group),y)) + geom_boxplot(aes(fill = factor(group))) + coord_cartesian(ylim = c(-40,40))

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以提前计算这些值并通过例如geom_text

library(dplyr)
upper_lim <- 40
lower_lim <- -40
mockdata$upper_cut <- mockdata$y > upper_lim
mockdata$lower_cut <- mockdata$y < lower_lim
mockdata$group <- as.factor(mockdata$group)
mockpts <- mockdata %>% 
    group_by(group) %>% 
    summarise(upper_count = sum(upper_cut), 
              lower_count = sum(lower_cut)) 

ggplot(mockdata, aes(group, y)) + 
    geom_boxplot(aes(fill = group)) + 
    coord_cartesian(ylim = c(lower_lim, upper_lim)) + 
    geom_text(y = lower_lim, data = mockpts, 
              aes(label = lower_count, x = group), hjust = 1.5) + 
    geom_text(y = upper_lim, data = mockpts, 
              aes(label = upper_count, x = group), hjust = 1.5)

enter image description here