Letras de subíndice en la etiqueta del eje ggplot

Otro gráfico para publicación, otro día ha pasado retocando cosas en ggplot2 … ¿Estoy loco? No estoy seguro…

dat <- data.frame(x = rnorm(100), y = rnorm(100)) ggplot(dat, aes(x=x,y=y)) + geom_point() + labs(y=expression(Blah[1])) dat <- data.frame(x = rnorm(100), y = rnorm(100)) ggplot(dat, aes(x=x,y=y)) + geom_point() + labs(y=expression(Blah[1d])) 

Estoy tratando de encontrar la forma de tener letras de subíndice en una etiqueta de eje. El primer ejemplo funciona ya que es solo un número, tan pronto como tienes un personaje entre corchetes falla. Blah [subíndice (1d)] es esencialmente lo que necesito, pero no puedo encontrar la forma de hacerlo para dejarme tener letras en subíndice. He probado variaciones que incluyen pegar (), etc.

Por supuesto, para boost la frustración …

labs(y=expression(Blah[12])) – esto funciona

labs(y=expression(Blah[d])) – esto funciona

labs(y=expression(Blah[d1])) – esto funciona

labs(y=expression(Blah[1d])) – esto falla.

¿Pensamientos?

Puedo pensar en dos formas mejores que usar paste :

  ggplot(dat, aes(x=x,y=y)) + geom_point() + labs(y=expression(Blah[1*d])) ggplot(dat, aes(x=x,y=y)) + geom_point() + labs(y=expression(Blah["1d"])) 

Los tokens (o “nombres” o “símbolos”) en R no deben comenzar con dígitos. De modo que puede sortear esa limitación citando o separando 1 d mediante un separador que no sea espacio, el operador * . Eso “une” o “liga” un literal numérico puro con un símbolo R legal o token.

Para obtener un signo de porcentaje sin suscripción solo:

  ggplot(dat, aes(x=x,y=y)) + geom_point() + labs(y=expression(Blah[1*d]*"%")) 

Para poner parens alrededor del pct-sign:

 expression(Blah[1*d]*"(%)") 

El carácter % tiene un significado especial en el análisis R, ya que significa el comienzo de un operador infijo definido por el usuario. Entonces, usarlo como un literal requiere que sea citado.

Bueno. Siento que no publiqué esto solo para responderlo yo mismo, a pesar de lo rápido que lo conseguí (¡siempre el camino cuando haces una pregunta!) Aquí está:

 ggplot(dat, aes(x=x,y=y)) + geom_point() + labs(y=expression(Blah[1][d])) 

Pensé que era mejor publicar la respuesta en lugar de eliminar la pregunta, ya que podría ayudar a otra persona algún día.

‘Blahs’ a un lado, lo que realmente quería era expression(paste("Hb", A[1][c]," (%)",sep=""))

Por qué paste0() no funciona aquí está más allá de mí.