【发布时间】:2015-02-28 03:02:04
【问题描述】:
假设我有这样的情节
library(ggplot2)
ggplot(mtcars, aes(x=wt)) + ylab("") +
geom_line(aes(y=mpg, color="one")) +
geom_line(aes(y=qsec, color="two")) +
scale_color_manual(name="Val", values=c(one="#105B63",two="#BD4932"))
我在其中绘制两条线并为每条线指定一个颜色组。现在假设我想将变量名称动态指定为字符值,这意味着我需要使用 aes_string(). 如果我尝试
v1<-"mpg"
v2<-"qsec"
ggplot(mtcars, aes(x=wt)) + ylab("") +
geom_line(aes_string(y=v1, color="one")) +
geom_line(aes_string(y=v2, color="two")) +
scale_color_manual(name="Val", values=c(one="#105B63",two="#BD4932"))
我得到了错误
Error in eval(expr, envir, enclos) : object 'one' not found
因为现在aes_string() 正在尝试解析颜色值,而我只需要文字字符值。如果我尝试
ggplot(mtcars, aes(x=wt)) + ylab("") +
geom_line(aes_string(y=v1), aes(color="one")) +
geom_line(aes_string(y=v2), aes(color="two")) +
scale_color_manual(name="Val", values=c(one="#105B63",two="#BD4932"))
我明白了
Error: ggplot2 doesn't know how to deal with data of class uneval
大概是因为该层不知道如何处理两个美学指令。
如何组合 aes() 和 aes_string() 美学或如何为 aes_string() 指定文字字符值?
【问题讨论】: