2017-07-26 72 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