【问题标题】:What's the difference between facet_wrap() and facet_grid() in ggplot2?ggplot2 中的 facet_wrap() 和 facet_grid() 有什么区别?
【发布时间】:2013-12-25 19:28:43
【问题描述】:

我一直在阅读ggplot2 这两个函数的文档。我想知道有什么区别以及使用每个功能的正确情况(facet_wrap()facet_grid())。

library(ggplot2)

p <- qplot(displ, hwy, data = mpg)
p + facet_wrap(~ cyl)

p + facet_grid(~ cyl)

我提供这个小例子作为起点。不同之处似乎在于 wrap 使情节更加自主,而 grid 使一个情节合在一起。

【问题讨论】:

    标签: r ggplot2 facet-wrap


    【解决方案1】:

    主要引用 ggplot2 book, p。 148楼。

    刻面分为三种类型:

    • facet_null() : 单个图,默认值。
    • facet_wrap():将一维面板带“包裹”成二维。
    • facet_grid() :生成由变量定义的二维面板网格,这些变量形成 行和列。

    刻面包装

    facet_wrap() 制作一长串面板(由任意数量的 变量)并将其包装成二维。如果您只有一个变量,这很有用 有很多层次,并希望以更节省空间的方式安排地块 方式。

    您可以使用ncolnrowas.tabledirncolnrow 控制多少列和多少行(你只需要设置一个)。 as.table 控制构面的布局是否像 一个表格(TRUE),右下角的最高值,或一个图(FALSE), 右上角的值最高。 dir 控制换行的方向: h水平或v垂直。

    构面网格

    来自?facet_gridfacet_grid() 形成由行和列分面变量定义的面板矩阵。当您有两个离散变量并且变量的所有组合都存在于数据中时,它最有用。

    您可以在行或列中使用多个变量,方法是“添加”它们 一起,例如a + b ~ c + d.

    facet grid() 有一个名为space 的附加参数,它采用 与scales 相同的值。

    # If scales and space are free, then the mapping between position
    # and values in the data will be the same across all panels. This
    # is particularly useful for categorical axes
    ggplot(subset(mpg, manufacturer %in% c("audi", "honda", "toyota")) , aes(drv, model)) +
        geom_point() +
        facet_grid(manufacturer ~ ., scales = "free", space = "free") +
        theme(strip.text.y = element_text(angle = 0))
    

    (简化)示例取自?facet_grid

    【讨论】:

      【解决方案2】:

      对于单变量图,您可以使用facet_grid()facet_wrap()

      facet_wrap(~variable) 将为variable 的级别数返回一个对称图矩阵。

      facet_grid(.~variable) 将返回与水平分布的variable 级别相等的构面。

      facet_grid(variable~.) 将返回与垂直分布的variable 级别相等的构面。

      【讨论】:

      • 你知道为什么是facet_wrap(~variable)而不是facet_wrap(variable~)吗?
      【解决方案3】:

      下面的答案是指facet_grid()facet_wrap()中有2个参数的情况。

      facet_grid(x ~ y) 将显示 x*y 绘图,即使某些绘图是空的。 例如:

      library(ggplot2)
      g <- ggplot(mpg, aes(displ, hwy))
      

      有 4 个不同的 cyl 和 7 个不同的类值。

      g + geom_point(alpha=1/3) + facet_grid(cyl~class)
      

      上面显示 4 * 7 = 28 个图,即使有些是空的(因为有些类没有对应的柱面值,比如 class="midsize" 的行没有任何对应的 cyl="5" 值) 另一方面,facet_wrap(x ~ y) 仅显示具有实际值的图。

      g + geom_point(alpha=1/3) + facet_wrap(cyl~class)
      

      现在显示了 19 个图,每个 cyl 和 class 组合一个。

      【讨论】:

      【解决方案4】:

      facet_wrap(...)ggplots 串在一起,在基于单个变量的不同框架(构面)中。 facet_grid(...) 可以带两个变量:

      p + facet_grid(cyl~class)
      

      您还可以使用第三个变量在每个方面进行分组:

      qplot(displ, hwy, data=mpg,color=factor(year)) + facet_grid(cyl~class)
      

      通过#汽缸数和等级显示高速公路里程与排量的改善(或不足)。

      【讨论】:

      • facet_wrap 也可以带两个变量。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2018-11-06
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多