Letras subscritas no label do eixo ggplot

Outro gráfico para publicação, mais um dia fazendo ajustes em ggplot2 … Estou chorando? Não tenho certeza…

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])) 

Estou tentando descobrir como ter letras subscritas em um label de eixo. O primeiro exemplo funciona como se fosse apenas um número, assim que você tem um caractere entre colchetes, ele falha. Blah [subscript (1d)] é essencialmente o que eu preciso, mas não posso descobrir como obtê-lo para deixar-me ter letras em subscrito. Já tentei variações incluindo paste () etc.

Claro, para aumentar a frustração …

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

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

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

labs(y=expression(Blah[1d])) – isso falha.

Pensamentos?

Eu posso pensar em duas maneiras melhores do 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"])) 

Tokens (ou “nomes” ou “símbolos”) em R não devem começar com dígitos. Assim, você contorna essa limitação citando ou separando 1 e d por um separador não-espacial, o operador * . Que “une” ou “liga” um literal numérico puro com um símbolo R ou token legal.

Para obter um sinal de porcentagem não associado apenas:

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

Para colocar parens ao redor do sinal de pct:

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

O caractere % tem um significado especial na análise R, pois significa o início de um operador infixo definido pelo usuário. Então, usá-lo como um literal requer que seja citado.

OK. Eu suo, eu não postei isso só para responder, apesar de quão rápido eu consegui (sempre do jeito que você faz uma pergunta! Aqui está:

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

Pensei que seria melhor postar a resposta em vez de remover a pergunta, pois ela pode ajudar alguém mais um dia.

‘Blahs’ de lado, o que eu realmente queria era expression(paste("Hb", A[1][c]," (%)",sep=""))

Por que paste0() não funciona aqui está além de mim.