r - ggplot2:多个带有框和标签的图

标签 r plot ggplot2 facet facet-wrap

我正在尝试创建一个图网格,它应该有一个围绕它们的框,一个类似棋盘的标签(即顶部/底部的字母,侧面的数字),以及一条分隔两半网格的垂直线.

我希望使用分面完成它(或足够类似的事情),但是当给定大量绘图时, 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

最佳答案

这似乎很接近。


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(...)使标签为粗体和红色,并关闭条(面标签)背景。

不幸的是,要添加垂直线需要使用 grid.rect(...)gridExtra包裹。正如您可能看到的那样,对矩形的位置进行了一些调整以使其正确。如果顶部有四个以上的类别,则很可能需要这样做。

AFAIK 没有简单的方法将垂直面标签放在左侧。

作为侧边栏,请注意您不需要,例如 c(rep(...)) . rep(...)已经返回一个向量。此外,这很重要,使用 data.frame(cbind(...)) 是一个非常糟糕的主意。 .刚刚data.frame(...)完成同样的事情,速度要快得多,并且不会产生中间矩阵。

关于r - ggplot2:多个带有框和标签的图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26823788/

相关文章:

r - 无监督字符串聚类

r - R 中的 react 性问题 - 您尝试做一些只能从 react 性消费者内部完成的事情

r - ggplot2:geom_point 有时会根据使用的审美删除 NA 值

r - 如何使用 reshape r "unmelt"数据

r - 将 geom_segment 与 coord_pol 一起使用

r - 使用 scales = 'free' 在 facet_wrap 中设置 x/y 限制

r - ggplot2 饼图和圆环图在同一图上

bash - 在绘制二进制时,如何告诉 gnuplot 从变量获取数组大小?

python-2.7 - 使用 skimage 并排绘制两个图像

python - Matplotlib 挑战 - 仅在存在范围内绘制的智能方法