ggplot() +
layer(
data = diamonds, mapping = aes(x = carat, y = price),
geom = "point", stat = "identity"
)
In the above example, I am wondering if I can specify the parameters for the "aes" function by indexes.
I know that ca开发者_JAVA技巧rat and price correspond to the 1st and 8th elements in the names array of diamond. Can you explain why the following does not work?
ggplot() +
layer(
data = diamonds, mapping = aes(x = names(diamonds)[1], y = names(diamonds)[8]),
geom = "point", stat = "identity"
)
Thanks, Derek
The second version does not work because names(diamonds)[1]
is "carat"
and not carat
. Use aes_string
instead of aes
for this to work.
ggplot( data = diamonds, mapping = aes_string(x = names(diamonds)[1], y = names(diamonds)[8]), stat = "identity")+ geom_point()
EDIT: To deal with names that have illegal characters, you have to do enclose them in backticks (that's the case any time you want to use them):
dd <- data.frame(1:10, rnorm(1:10))
names(dd) <- c("(PDH-TSV 4.0)(ET)(240)", "Y")
nms <- paste("`", names(dd), "`", sep="")
ggplot(dd, mapping=aes_string(x=nms[1], y=nms[2])) + geom_point()
精彩评论