2017-07-26 334 views
1

有时你想的图的一轴的范围限制到感兴趣的区域,以使得特定功能(如中值&四分位数的位置)被强调。尽管如此,可能有必要弄清楚(截断的)轴范围之外有多少/多少比例值。显示值的数量外轴范围在箱线图(R中使用GGPLOT2)

我想在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

+0

可以使用'quantile'功能。 'coord_cartesian(ylim = quantile(mockdata $ y,probs = c(0.10,0.90)))'这样你就可以表示多少百分比的点被切断。 –

+0

您的示例代码将在两组合并数据的第10和第90百分位数处截断。但是这两个组可能会有所不同,我希望能通过某种方式实际显示剧情截断信息。 –

回答

0

您可以预先计算这些值,并显示它们通过例如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

相关问题