etiqueta de dos líneas ggplot2 con expresión

Me gustaría escribir una etiqueta de eje sobre dos líneas con una statement de expression() . Sin embargo, plotmath y expression no lo permitirán (por ejemplo, el texto con subíndice aparece en el extremo derecho). Encontré esta discusión alrededor de 2005 de un problema similar, pero el trabajo que ofrecen no se traduce a mi aplicación en ggplot2. Una pregunta reciente abordó una permutación diferente de declaraciones de expresión de varias líneas, pero una vez más el trabajo proporcionado no se aplica aquí.

Ejemplo:

 p <- ggplot(mtcars,aes(x=wt,y=mpg))+ geom_point()+ xlab(expression(paste("A long string of text goes here just for the purpose \n of illustrating my point Weight "[reported]))) try(ggsave(plot=p,filename=,height=4,width=6)) 

produce una imagen donde se quita el subíndice “informado” a la derecha cuando me gustaría que se coloque junto a la palabra anterior. ggplot2 etiqueta de dos líneas con expresión

Creo que esto es un error. (O una consecuencia del hecho de que “las expresiones de varias líneas no son compatibles”, como se indica en la conversación a la que se ha vinculado).

La solución temporal a la que aludió Gavin Simpson es:

 #For convenience redefine p as the unlabeled plot p <- ggplot(mtcars,aes(x=wt,y=mpg))+geom_point() #Use atop to fake a line break p + xlab(expression(atop("A long string of text for the purpose", paste("of illustrating my point" [reported])))) 

enter image description here

Es posible usar saltos de línea verdaderos con subíndices. En el siguiente ejemplo, que tiene la misma forma que su ejemplo, el subíndice se coloca correctamente junto al rest del texto, pero las dos líneas de texto no están centradas correctamente:

 p + xlab(expression(paste("line1 \n line2 a" [b]))) 

enter image description here

Creo que en ambos casos, el subíndice se coloca incorrecto cuando la línea superior del texto es más larga que la línea inferior del texto. Comparar

 p + xlab(expression(paste("abc \n abcd" [reported]))) 

enter image description here

 p + xlab(expression(paste("abc \n ab" [reported]))) 

enter image description here

El subíndice siempre termina alineado justo a la derecha del extremo derecho de la línea superior.

 p + xlab(expression(paste("abcdefghijklmnop \n ab" [reported]))) 

enter image description here

Podrías usar este truco,

 library(gridExtra) library(grid) element_custom <- function() { structure(list(), class = c("element_custom", "element_text")) } element_grob.element_custom <- function(element, label="", ...) { mytheme <- ttheme_minimal(core = list(fg_params = list(parse=TRUE, hjust=0, x=0.1))) disect <- strsplit(label, "\\n")[[1]] tableGrob(as.matrix(disect), theme=mytheme) } # default method is unreliable heightDetails.gtable <- function(x) sum(x$heights) ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_line() + labs(x= "First~line \n italic('and a second') \n integral(f(x)*dx, a, b)")+ (theme_grey() %+replace% theme(axis.title.x = element_custom())) 

enter image description here