Combinando las funciones paste () y expression () en las tags de los gráficos

Considera este simple ejemplo:

labNames <- c('xLab','yLabl') plot(c(1:10),xlab=expression(paste(labName[1], x^2)),ylab=expression(paste(labName[2], y^2))) 

Lo que quiero es que la entrada de caracteres definida por la variable ‘labName,’ xLab ‘o’ yLab ‘aparezca junto a X ^ 2 o y ^ 2 definida por la expresión (). Tal como está, el texto real ‘labName’ con un subíndice se une a la expresión superíndice.

¿Alguna idea?

Una solución alternativa a la de @Aaron es la función bquote() . Necesitamos suministrar una expresión R válida, en este caso LABEL ~ x^2 por ejemplo, donde LABEL es la cadena que desea asignar desde el vector labNames . bquote evalúa el código R dentro de la expresión envuelta en .( ) y sustituye el resultado en la expresión.

Aquí hay un ejemplo:

 labNames <- c('xLab','yLab') xlab <- bquote(.(labNames[1]) ~ x^2) ylab <- bquote(.(labNames[2]) ~ y^2) plot(c(1:10), xlab = xlab, ylab = ylab) 

(Tenga en cuenta que ~ simplemente agrega un poco de espacio, si no desea el espacio, reemplácelo con * y las dos partes de la expresión se yuxtaponen).

Use substitute lugar.

 labNames <- c('xLab','yLab') plot(c(1:10), xlab=substitute(paste(nn, x^2), list(nn=labNames[1])), ylab=substitute(paste(nn, y^2), list(nn=labNames[2]))) 

EDITAR: agregó un nuevo ejemplo para ggplot2 al final

Ver ? Plotmath para las diferentes operaciones matemáticas en R

Debería poder usar la expresión sin pegar. Si usa el símbolo tilda (~) dentro de la función de expresión, asumirá que hay un espacio entre los caracteres, o podría usar el símbolo * y no pondrá un espacio entre los argumentos

A veces necesitarás cambiar los márgenes al colocar superíndices en el eje y.

 par(mar=c(5, 4.3, 4, 2) + 0.1) plot(c(1:10), xlab = expression(xLab ~ x^2 ~ m^-2), ylab = expression(yLab ~ y^2 ~ m^-2), main="Plot 1") 

enter image description here

 plot(c(1:10), xlab = expression(xLab * x^2 * m^-2), ylab = expression(yLab * y^2 * m^-2), main="Plot 2") 

enter image description here

 plot(c(1:10), xlab = expression(xLab ~ x^2 * m^-2), ylab = expression(yLab ~ y^2 * m^-2), main="Plot 3") 

enter image description here

Con suerte, puede ver las diferencias entre los trazados 1, 2 y 3 con los diferentes usos de los símbolos ~ y *. Una nota extra, puede usar otros símbolos como trazar el símbolo de grado para temperaturas para o mu, phi. Si desea agregar un subíndice, use los corchetes.

 plot(c(1:10), xlab = expression('Your x label' ~ mu[3] * phi), ylab = expression("Temperature (" * degree * C *")")) 

enter image description here

Aquí hay un ejemplo de ggplot que usa expresión con un ejemplo sin sentido

 require(ggplot2) 

O si tiene instalada la biblioteca de pacman, puede usar p_load para descargar automáticamente y cargar y adjuntar paquetes complementarios

 # require(pacman) # p_load(ggplot2) data = data.frame(x = 1:10, y = 1:10) ggplot(data, aes(x,y)) + geom_point() + xlab(expression(bar(yourUnits) ~ g ~ m^-2 ~ OR ~ integral(f(x)*dx, a,b))) + ylab(expression("Biomass (g per" ~ m^3 *")")) + theme_bw() 

enter image description here

Muy buen ejemplo utilizando paste y sustituto para componer ambos símbolos (mathplot) y variables en http://vis.supstat.com/2013/04/mathematical-annotation-in-r/

Aquí hay una adaptación ggplot

 library(ggplot2) x_mean <- 1.5 x_sd <- 1.2 N <- 500 n <- ggplot(data.frame(x <- rnorm(N, x_mean, x_sd)),aes(x=x)) + geom_bar() + stat_bin() + labs(title=substitute(paste( "Histogram of random data with ", mu,"=",m,", ", sigma^2,"=",s2,", ", "draws = ", numdraws,", ", bar(x),"=",xbar,", ", s^2,"=",sde), list(m=x_mean,xbar=mean(x),s2=x_sd^2,sde=var(x),numdraws=N))) print(n) 

Si x ^ 2 y y ^ 2 son expresiones ya dadas en la variable al cuadrado, esto resuelve el problema:

 labNames <- c('xLab','yLab') squared <- c(expression('x'^2), expression('y'^2)) xlab <- eval(bquote(expression(.(labNames[1]) ~ .(squared[1][[1]])))) ylab <- eval(bquote(expression(.(labNames[2]) ~ .(squared[2][[1]])))) plot(c(1:10), xlab = xlab, ylab = ylab) 

Tenga en cuenta que [[1]] detrás de cuadrado [1]. Le da el contenido de "expresión (...)" entre los corchetes sin ningún tipo de caracteres de escape.