Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R ggplot: specify aes by index

Tags:

r

ggplot2

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 carat 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

like image 371
defoo Avatar asked Dec 12 '25 18:12

defoo


1 Answers

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()
like image 183
Aniko Avatar answered Dec 15 '25 11:12

Aniko



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!