2014-11-09 64 views
3

我想創建一個情節的網格,應該有一個盒子在他們周圍,棋盤狀標籤(即字母在頂部/底部,數字在兩側) ,以及將網格的兩半分開的垂直線。ggplot2:與他們周圍的盒子和標籤的多個情節

我希望把它做(或足夠類似的東西),使用小面,但facet_grid不創建側身標籤(如here)給出了大量的地塊時,它出現:

testdata <- cbind("ID"=c(rep(1:24, each=10)), 
        "TT"=c(rep(0:1, each=5)), 
        "RD"=c(seq(1:5)), 
        "DV"=rnorm(240, 10, 5)) 
testdata <- data.frame(testdata) 

testplot <- ggplot(data=testdata, aes(x=RD, y=DV)) + 
    geom_line(colour="black") + geom_point() + 
    facet_wrap(TT ~ ID, ncol=4) 

enter image description here

(facet_wrap的另一個問題是,它不能很好地處理ID〜TT排序,我希望將這些值顯示爲[1,0],[1,1],[2,0], [2,1]然後;而不是更好的[1,0],[2,0],[3,0],[1,1],[2,1] ...但可以解決。 )

我考慮的另一個選項是使用box();但是,這隻適用於個別情節(使用grid創建對象.arrange/arrangeGrob不起作用)。

最終,我想要一個大致如下的情節。我會很高興有任何建議!

Example

+0

您可以通過添加theme_bw()將每個圖表複選框。我不確定你想要什麼。你想使用facet_wrap還是facet_grid。我知道你想要一條垂直線在中間,但除了那條線以外,最終情節應該如何顯示?你還從哪裏得到你想要使用的信件?你的數據框中不應該有包含它們的列嗎? – Docconcoct 2014-11-09 01:45:52

+0

我重讀並看到你想要最後一張圖作爲你的輸出。最簡單的方法是添加一個包含字母A-D的列,以表示與相關圖表相關的每列。這樣,facet_grid會自動爲您使用圖形右側的標籤1-24(?),如第一個示例所示。 – Docconcoct 2014-11-09 02:05:50

+0

對於一個很好解釋的問題和明確的代碼+1。 – 2014-11-09 04:10:56

回答

0

爲了讓我的意見清晰。

我建議創建一個看起來像這樣的數據幀:

ID TT RD DV   ColumnLetter  RowNumber 
1 0 1 12.4734172  A    1 
1 0 2 7.1034136  B    2 
1 0 3 3.0688039  C    3 
1 0 4 -2.4502442  D    4 

然後使用

face_grid(RowNumber~ColumnLetter) 

,你的願望格式化。

4

這似乎很接近。

set.seed(1) # for reproducible example 
testdata <- data.frame(ID=rep(LETTERS[1:4], each=60), 
         TT=rep(1:6, each=10), 
         grp=rep(0:1,each=5), 
         RD=seq(1:5), 
         DV=rnorm(240, 10, 5)) 
library(ggplot2) 
library(gridExtra) 
ggp <- ggplot(data=testdata, aes(x=RD, y=DV, group=grp)) + 
    geom_line(colour="black") + geom_point() + 
    facet_grid(TT ~ ID)+ 
    theme(strip.background=element_rect(fill=NA), 
     strip.text=element_text(color="red",face="bold",size=15), 
     strip.text.y=element_text(angle=0)) 
grid.newpage() 
grid.draw(arrangeGrob(ggp)) 
grid.rect(x=0.51,y=0.5,width=0.007,height=0.8,gp=gpar(col=NA,fill="red")) 

我添加了一個grp變量,以你的例子,因爲你似乎想每個小兩行。

我們可以用facet_grid(...)ggplot加上theme(...)來使標籤變成粗體和紅色,然後關閉strip(facet label)背景。

不幸的是,要添加垂直線,需要在gridExtra包中使用grid.rect(...)。正如你可以看到的那樣,爲了使它正確,矩形的位置有一些調整。如果你有四個以上的類別,你就需要這樣做。

AFAIK沒有簡單的方法將垂直刻面標籤放在左側。

作爲一個側欄,請注意,您不需要,例如,c(rep(...))rep(...)已經返回一個向量。另外,這很重要,使用data.frame(cbind(...))是一個非常糟糕的主意。只要data.frame(...)完成相同的事情,速度更快,並且不會產生中間矩陣。