2017-05-23 65 views
2

boxplotの外れ値データにちょうどジッタを適用する方法はありますか?これはコードですggplot2でboxplotの外れ値データにジッタを適用する

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() 

ありがとうございます!

+1

再現可能な例を教えてください。 –

答えて

3

データセットにベクトルを追加して、アウトライヤーであるかどうかを示します。次に、geom_boxplotに異常値をプロットしないように設定し、geom_pointを使用して異常値の明示をプロットします。

データセットggplot2diamondsを使用して説明します。

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 

enter image description here

+0

私は 'data ='引数で使われた関数を見たことがありません。そりゃ素晴らしい! – Brian

+0

外れ値のデフォルトはちょっと残っているので、点はウィスカーと重なり合うようになります。 'outlier.high = V8> quantile(V8、.75)+ 1.50 * IQR(V8)'と 'outlier.low = V8 <分位数(V8,.25)-1.50×IQR(V8)) 'となる。次に、 'geom_jitter(data = filter(a、outlier.high == T | outlier.low == T)、color =" red "、width = .2)'を追加して、 –

2

これは(非外れ値のためのNAを有する色変数を割り当てる)上記よりもわずかに異なるアプローチであり、上限と下限の計算のための補正を含みます。

デフォルトの「異常値」の定義は、25分の75分の1/4〜1.5倍の範囲内の点です(IQR)。 (tidyverse機能をdplyr /使用)上部/下限外れ値を計算

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))) 

いくつかのサンプルデータを生成

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」、 ndはプロットに現れません。

dplyr::case_when()関数は、それが動作しない場合ので、ここでのベースの代替である(githubの開発バージョンenter link description hereに> 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() 

enter image description here

関連する問題