我有一个函数,可以 Select 性地接受预定义的美学(对于ggplot2
).这可以是几种形式之一,包括
mapping <- aes(color = c(cyl, gear))
mapping
# Aesthetic mapping:
# * `colour` -> `c(cyl, gear)`
或编程为
mapping <- aes(color = c(.data[["cyl"]], .data[["gear"]]))
mapping
# Aesthetic mapping:
# * `colour` -> `c(.data[["cyl"]], .data[["gear"]])`
(我在这里使用的是color=
,但实际上我使用的是group=
和subgroup=
的不同方式.为简单起见,我在这里简化为color=
个.)
我的函数不能控制调用者是否或如何定义mapping
(默认为NULL
),它可以使用符号(第一个例子),也可以使用像.data
这样的编程选项之一(第二个例子),但在内部,在我调整/增加数据之后,我需要添加一个变量.
我可以用c
结合different美学,比如
mapping <- aes(color = factor(cyl))
othermap1 <- aes(x = mpg, y = disp)
ggplot(mtcars, mapping = aes(!!!c(mapping, othermap1))) +
geom_path()
(剧情本身并不重要,重要的是它奏效了.)
如果我想给color=
的审美增加一个变量,我不知道如何最好地做到这一点.
othermap2 <- aes(color = gear)
我希望能够得到color=
的综合效果,结果类似于手册:
ggplot(mtcars, mapping = aes(mpg, disp, color = interaction(cyl, gear))) +
geom_path()
这完全是程序性的,我更愿意允许用户在调用我的函数时提供一个"真正的"mapping=
参数(例如,mapping=aes(...)
).
我认为一种可能的方法是要求用户提供一个命名的变量列表,如果他们想要赋值color=
,比如mapping=list(group="cyl")
,我会在内部增加/合并,然后在内部创建.data[[x]]
美学……但我真的更愿意继续允许用户使用mapping=aes(..)
.