2017-01-20 25 views
3

私は2つのセパレータで分割できるデータを持っています。 1つは年であり、2つ目はフィールド特性です。ggplot2:点と塗り分けのあるボックスプロット

box<-as.data.frame(1:36) 

box$year <- c(1996,1996,1996,1996,1996,1996,1996,1996,1996, 
       1997,1997,1997,1997,1997,1997,1997,1997,1997, 
       1996,1996,1996,1996,1996,1996,1996,1996,1996, 
       1997,1997,1997,1997,1997,1997,1997,1997,1997) 
box$year <- as.character(box$year) 

box$case <- c(6.40,6.75,6.11,6.33,5.50,5.40,5.83,4.57,5.80, 
       6.00,6.11,6.40,7.00,NA,5.44,6.00, NA,6.00, 
       6.00,6.20,6.40,6.64,6.33,6.60,7.14,6.89,7.10, 
       6.73,6.27,6.64,6.41,6.42,6.17,6.05,5.89,5.82) 

box$code <- c("L","L","L","L","L","L","L","L","L","L","L","L", 
       "L","L","L","L","L","L","M","M","M","M","M","M", 
       "M","M","M","M","M","M","M","M","M","M","M","M") 

colour <- factor(box$code, labels = c("#F8766D", "#00BFC4")) 

ボックスプロットでは、データをどのように配信するかを知るために、ポイントを表示する必要があります。それは簡単に毎年のための1つの箱ひげ図で行われます。

ggplot(box, aes(x = year, y = case, fill = "#F8766D")) + 
    geom_boxplot(alpha = 0.80) + 
    geom_point(colour = colour, size = 5) + 
    theme(text = element_text(size = 18), 
     axis.title.x = element_blank(), 
     axis.title.y = element_blank(), 
     panel.grid.minor.x = element_blank(), 
     panel.grid.major.x = element_blank(), 
     legend.position = "none") 

enter image description here

しかし、私はそれらのパラメータを埋める追加すると、それはより複雑になる:

ggplot(box, aes(x = year, y = case, fill = code)) + 
    geom_boxplot(alpha = 0.80) + 
    geom_point(colour = colour, size = 5) + 
    theme(text = element_text(size = 18), 
     axis.title.x = element_blank(), 
     axis.title.y = element_blank(), 
     panel.grid.minor.x = element_blank(), 
     panel.grid.major.x = element_blank(), 
     legend.position = "none") 

enter image description here

そして、今質問:どのようにこれらの点をboxplotの軸に移動するのですか?青色はboxplotを示し、赤色は赤色を示します。

+0

[ 'geom_dotplot'(http://docs.ggplot2.org/current/geom_dotplot.html)を使用して' binaxis =「はy''はまた、関心のものであってもよいです。 – bouncyball

答えて

6

Henrikのように、position_jitterdodge()shape = 21を使用してください。あなたは少しもあなたのコードをクリーンアップすることができます

  1. ボックスを定義する必要はありませんが、あなたが望むと色係数を構築スキップ場合は、色をggplotハッシュを出すことができます作品
  2. によってそれを作品を埋めます。デフォルトを変更する場合は、scale_fill_manualscale_color_manualを参照してください。

    box <- data.frame(year = c(1996,1996,1996,1996,1996,1996,1996,1996,1996, 
            1997,1997,1997,1997,1997,1997,1997,1997,1997, 
            1996,1996,1996,1996,1996,1996,1996,1996,1996, 
            1997,1997,1997,1997,1997,1997,1997,1997,1997), 
            case = c(6.40,6.75,6.11,6.33,5.50,5.40,5.83,4.57,5.80, 
            6.00,6.11,6.40,7.00,NA,5.44,6.00, NA,6.00, 
            6.00,6.20,6.40,6.64,6.33,6.60,7.14,6.89,7.10, 
            6.73,6.27,6.64,6.41,6.42,6.17,6.05,5.89,5.82), 
            code = c("L","L","L","L","L","L","L","L","L","L","L","L", 
            "L","L","L","L","L","L","M","M","M","M","M","M", 
            "M","M","M","M","M","M","M","M","M","M","M","M")) 
    
    ggplot(box, aes(x = factor(year), y = case, fill = code)) + 
        geom_boxplot(alpha = 0.80) + 
        geom_point(aes(fill = code), size = 5, shape = 21, position = position_jitterdodge()) + 
        theme(text = element_text(size = 18), 
         axis.title.x = element_blank(), 
         axis.title.y = element_blank(), 
         panel.grid.minor.x = element_blank(), 
         panel.grid.major.x = element_blank(), 
         legend.position = "none") 
    

enter image description here

3

私はあなたがすでにJakeKauppの素敵な答え@受け入れられてきましたが、私は、私はgeom_dotplotを使用して、さまざまなオプションを投げると思っご覧ください。あなたが可視化しているデータはかなり小さいので、なぜボックスプロットを控えてみませんか?

ggplot(box, aes(x = factor(year), y = case, fill = code))+ 
    geom_dotplot(binaxis = 'y', stackdir = 'center', 
       position = position_dodge()) 
enter image description here

+0

ありがとう!しかし、私のデータセットは非常に大きいので、ボックスプロットを使用する必要があります。この質問のためのセットはそれのほんの一部です。 –

関連する問題