为什么在 R ggplot2::facet_grid() 中传递字符串适用于行而不适用于列?
Why passing a string in R ggplot2::facet_grid() works for rows but not for columns?
Here 是该问题的一些解决方法,但是您 可以在 [=17= 中为 rows
传递字符串是有原因的] 但 不适用于 cols
?
这个有效(注意 rows
属性):
f_varname <- 'drv'
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( rows = f_varname )
但这不是(注意 cols
属性):
f_varname <- 'drv'
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( cols = f_varname )
# => Error: `cols` must be `NULL` or a `vars()` specification
相反,您必须对 cols
使用 vars()
规范:
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( cols = vars( drv ) )
哪个不能处理一个字符串:
f_varname <- 'drv'
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( cols = vars( f_varname ) )
# =>
# Error: At least one layer must contain all faceting variables: `f_varname`.
# * Plot is missing `f_varname`
# * Layer 1 is missing `f_varname`
从链接的讨论中,这个 answer 也适用于字符串:
f_varname <- 'drv'
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( reformulate( f_varname ) )
我认为@Limey 在评论中的解释是你问题的答案,但如果你正在寻找一个实用的解决方案(在你链接的那些之外),你可以将字符串变成一个符号(使用 sym()
) 然后使用 bang-bang 运算符将其传递给 vars,例如
library(tidyverse)
f_varname <- sym("cyl")
ggplot(mpg, aes(displ, cty)) +
geom_point() +
facet_grid(cols = vars(!!f_varname))
Here 是该问题的一些解决方法,但是您 可以在 [=17= 中为 rows
传递字符串是有原因的] 但 不适用于 cols
?
这个有效(注意 rows
属性):
f_varname <- 'drv'
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( rows = f_varname )
但这不是(注意 cols
属性):
f_varname <- 'drv'
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( cols = f_varname )
# => Error: `cols` must be `NULL` or a `vars()` specification
相反,您必须对 cols
使用 vars()
规范:
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( cols = vars( drv ) )
哪个不能处理一个字符串:
f_varname <- 'drv'
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( cols = vars( f_varname ) )
# =>
# Error: At least one layer must contain all faceting variables: `f_varname`.
# * Plot is missing `f_varname`
# * Layer 1 is missing `f_varname`
从链接的讨论中,这个 answer 也适用于字符串:
f_varname <- 'drv'
ggplot( mpg, aes( displ, cty ) ) + geom_point() +
facet_grid( reformulate( f_varname ) )
我认为@Limey 在评论中的解释是你问题的答案,但如果你正在寻找一个实用的解决方案(在你链接的那些之外),你可以将字符串变成一个符号(使用 sym()
) 然后使用 bang-bang 运算符将其传递给 vars,例如
library(tidyverse)
f_varname <- sym("cyl")
ggplot(mpg, aes(displ, cty)) +
geom_point() +
facet_grid(cols = vars(!!f_varname))