结合/合并两个ggplot美学

时间:2013-11-19 23:09:02

标签: r ggplot2 aesthetics

假设我有两个ggplot美学:

a.1 <- aes(v.1=1, v.2=2)
a.2 <- aes(v.3=3)

有没有办法结合已经建成的美学?在我的例子中,它将是:

a.merged <- aes(v.1=2, v.2=2,v.3=3)

我知道aes_string可用于从字符向量构建美学,可以连接,但我看的是已经构建了两个美学的情况,我想避免首先将它们转换为字符

2 个答案:

答案 0 :(得分:7)

> c(a.1,a.2)
$v.1
[1] 1

$v.2
[1] 2

$v.3
[1] 3

aes个对象是“未评估的表达式”,c()函数按预期工作,具体取决于您对“预期”的定义。为了安全起见,您可能需要添加被c()剥离的类:

a.merged <- c(a.1,a.2)
class(a.merged) <- "uneval"

如果您想一步完成,那么函数modifyList将不会删除“名称” - 无属性:

> modifyList(a.1, a.2)
List of 3
 $ v.1: num 1
 $ v.2: num 2
 $ v.3: num 3
> attributes(modifyList(a.1, a.2))
$names
[1] "v.1" "v.2" "v.3"

$class
[1] "uneval"

答案 1 :(得分:0)

<b>
library(ggplot2)

a.1 <- aes(v.1=1, v.2=2)
a.2 <- aes(v.3=3)

modifyList(a.1, a.2)

Aesthetic mapping: * `v.1` -> 1 * `v.2` -> 2 * `v.3` -> 3 不会改变它的参数,尽管名称如此。感谢 Simon.S.A. 提出这种方法 in the comments