【问题标题】:Multiple separate plots in one go一次完成多个单独的地块
【发布时间】:2013-05-24 07:39:19
【问题描述】:

使用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)

等等。

使用 cast 的东西会很完美。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    对于三个分面变量,请改用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-loop-phobic,

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

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

    【讨论】:

    • 这会产生与我的尝试相同的情节,只是安排得不太有用。
    • 两个完美的答案,但必须选择一个。
    【解决方案2】:

    我会这样做:

    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) 
    

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多