2014-11-09 45 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(...)完成相同的事情,速度更快,并且不会产生中间矩阵。