2012-06-26 148 views
2

我從這個數據繪製箱線圖:如何添加垂直線ggplot箱線圖中的R

MY_LABEL  MY_REAL  MY_CATEGORY 
1 [POS]  .56   POS 
1 [POS]  .57   POS 
1 [POS]  .37   POS 
2 [POS]  .51   POS 
1 [sim v]  .65   sim v 
... 

我使用GGPLOT2:

ggplot(data=myDF, aes(x=MY_LABEL, y=MY_REAL, fill=MY_CATEGORY)) + 
    scale_colour_manual(values=palette) + 
    coord_flip() + 
    geom_boxplot(outlier.size = 0) 

這工作得很好,和組的箱線圖由現場MY_CATEGORYenter image description here

我想做兩兩件事:

1)爲了改善該圖的清晰度,我想在各個塊之間添加分隔符,即在POSsim v之間,在sim vC等之間(參見圖中醜陋的紅線)。 我一直在努力與geom_vline沒有運氣。 或者,我想在塊之間添加空白區域。 2)如果我在灰度打印這個圖,我不能區分不同的塊。我試圖強制使用不同的調色板:

scale_colour_manual(values=c("black","darkgray","gray","white")) 

再次,沒有運氣,情節根本沒有改變。

你會建議做什麼?

+3

你應該嘗試與facet_grid和facet_wrap玩耍。如果您發佈可複製的內容,我們更容易爲您提供幫助。 –

+1

我認爲你的意思是「水平」線條。另外,Eric是對的:'facet_wrap'或'facet_grid'可能是最好的解決方案。 – smillig

回答

5

這會幫你嗎?

require(ggplot2) 
mtcars$cyl2<- ifelse(mtcars$cyl > 4, c('A'), c('B')) 
p <- ggplot(mtcars, aes(factor(cyl), mpg)) 
p + geom_boxplot() + facet_grid(. ~ cyl2, scales = "free", space = "free") 

會給這樣的事情, bbb

1

要改變填充顏色,你需要的值的命名載體。這些名稱需要與y軸類別名稱完全匹配。

scale_fill_manual(values=c("POS"="black", "sim v"="gray50", 
          "C"="gray80", "sim t"="white")) 

要分離y軸類別,請嘗試facet_grid()

facet_grid(factor(MY_CATEGORY) ~ ., drop=TRUE) 

我不確定這會起作用,因爲我沒有數據來測試它。

4

沒有人報道水平線路線,所以我想我會添加它。不知道爲什麼geom_vline()不適合你。這是我做了(選擇關閉埃裏克失敗的做法,發揮):

require(ggplot2) 
p <- ggplot(mtcars, aes(factor(cyl), mpg)) 
p <- p + geom_boxplot(aes(fill=factor(cyl))) + coord_flip() 
p <- p + geom_vline(xintercept=c(1.5,2.5)) 
p 

這裏有只有三箱線圖,但在打轉轉,ggplot似乎將它們放置在整數位置。只需找出你希望在第(n)行後面的一行,並將該行的參數n+0.5置於xintercept。顯然,您可以根據自己的喜好更改厚度和顏色:在xintercept位之後添加size=widthcolour="name"

順便說一句,geom_vline()似乎爲我工作,無論是否在coord_flip()之前或之後。我發現反直覺。


我不確定bdemarest是否正確,您需要的名稱才能與類別名稱匹配。我認爲問題在於您使用scale_colour_manual(),如果您使用aes(..., colour=var),而您使用的是fill=var,則適用這種情況。因此,您需要scale_fill_manual。基於上述,我們可以添加:

p <- p + scale_fill_manual(values=c("black","gray","white")) 
p 

請注意,我沒有爲要匹配的顏色定義任何因子名稱。我認爲顏色根據他們的順序簡單地應用於您的因素水平,但我可能是錯的。


上述所有的最終結果:

cyl boxplot

+0

有沒有什麼辦法可以手動減少箱子的寬度,使它們看起來不那麼「胖」? –

+1

@ baha-kev:是的,雖然由於某種原因,它似乎沒有記錄?我可以做'p + geom_boxplot(aes(fill = factor(cyl)),width = 0.5)+ coord_flip()'。用任何你想要的替換0.5。它在[stat_boxplot](http://had.co.nz/ggplot2/stat_boxplot.html)中提到,但不是[geom_boxplot](http://had.co.nz/ggplot2/geom_boxplot.html)。 – Hendy

+0

不錯的工作;謝謝- –