多个独立的地块一气呵成

时间:2013-05-24 07:39:20

标签: r ggplot2

使用ggplot2:

qplot(carat, price, data = diamonds) + facet_grid(cut ~ color ~ clarity)

不是我希望的。如何做到这样的事情,除了在每个清晰度水平上产生单独的图块网格,例如

qplot(carat, price, data = diamonds[diamonds$clarity=="SI2", ]) + facet_grid(cut ~ color)
qplot(carat, price, data = diamonds[diamonds$clarity=="VS1", ]) + facet_grid(cut ~ color)

等等。

使用演员表的东西是完美的。

2 个答案:

答案 0 :(得分:2)

对于三个分面变量,请尝试facet_wrap

facet_wrap(~ cut + color + clarity)

我重读了这个问题。如果你真的想要多个绘图(从措辞中不是那么清楚),那么只需循环clarity的等级。

for(clarity in levels(diamonds$clarity))
{
  p <- qplot(carat, price, data = diamonds[diamonds$clarity == clarity, ]) + 
    facet_grid(cut ~ color)
  print(p)
}

或者,如果你是for - 循环恐怖,

l_ply(
  levels(diamonds$clarity),
  function(clarity)
  {
    qplot(carat, price, data = diamonds[diamonds$clarity == clarity, ]) + 
      facet_grid(cut ~ color)
  }
)

如果要在屏幕上打印,请先打开历史记录。否则,请在循环中调用ggsave

答案 1 :(得分:1)

这就是我要做的事情:

base = qplot(carat, price, data = diamonds) + facet_grid(cut ~ color)
lp = dlply(diamonds, "clarity", `%+%`, e1 = base)

library(gridExtra)
do.call(grid.arrange, lp) # all in one page

# or multiple pages (with layout passed to grid.arrange)
all = do.call(marrangeGrob, c(lp, ncol=2, nrow=1))
ggsave("multipage.pdf", all, width=12)