我有一个函数可以选择接受预定义的美学(对于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
将合并 * 不同的 * 美学结合起来,如
mapping <- aes(color = factor(cyl))
othermap1 <- aes(x = mpg, y = disp)
ggplot(mtcars, mapping = aes(!!!c(mapping, othermap1))) +
geom_path()
型
(The情节本身并不重要,重要的是它能起作用。)
x1c 0d1x的数据
如果我想在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(..)
。
2条答案
按热度按时间xv8emn3q1#
你可以使用一些rlang魔法来操纵Map。简单地说,如果它是abent,我们就分配新的美学,否则我们创建一个新的调用组合两个表达式。
字符串
一些示威
型
x1c 0d1x的数据
创建于2023-12-22使用reprex v2.0.2
5gfr0r5j2#
我希望这能给你一个如何解决这个问题的方向。这是矢量化的,这样所有重复的美学都会被结合起来:
个字符
的数据