为何facet_wrap函数代码中省略'mapping'参数仍可正常运行?
为什么facet_wrap可以直接用~species而不用写mapping=?
这是因为facet_wrap的参数设计和你之前接触的ggplot()、geom_*()函数不一样,核心原因有两点:
- 首先,
facet_wrap的参数列表里没有mapping这个参数,它专门用第一个位置参数facets来指定分面的变量,而这个参数接受公式形式(比如~species)来定义分面依据。 - 其次,因为
facets是facet_wrap的第一个位置参数,所以你可以省略参数名facets=,直接传入~species,就像你写geom_point(aes(color=species))时省略mapping=一样——本质都是利用了R中位置参数可以省略参数名的特性。
举个等价写法的例子,你写的:
facet_wrap(~species)
和下面的代码效果完全一致:
facet_wrap(facets = ~species)
而你之前学的mapping=aes(...),是针对ggplot()、geom_*()这类包含mapping参数的函数,它们用mapping来定义数据变量到图形属性的映射,和facet_wrap的分面参数逻辑完全不同。
内容的提问来源于stack exchange,提问作者Maya
相关产品推荐
相关产品推荐

