这里有一些解决此问题的方法,但您是否有理由可以在ggplot2::facet_grid()
中为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`
从链接的讨论中,这个答案也适用于字符串:
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))