2012-05-16 25 views
5

Estoy luchando por trazar símbolos griegos como etiquetas de ejes. Debido a para recorrer varias parcelas con diferentes escalas, me gustaría usar un vector que contiene el nombre del símbolo en lugar de utilizar el nombre del símbolo dentro expression(), que funciona bien:Trazar etiquetas de ejes con símbolos griegos de un vector

x <- rnorm(10, 5,6) 
y <- rnorm(10, 2,1) 
xlab <- expression(paste(mu, "mol/mol")) 
plot(x,y, xlab = xlab) 

Por alguna razón, no puedo reemplazar "mu" con un vector que contiene el nombre del símbolo:

k <- "mu" 
xlab <- expression(paste(get(k), "mol/mol")) 
plot(x,y, xlab = xlab) 

encontré una question similares, pero lo que funcionó para funciones no parece funcionar para símbolos griegos:

ylab <- substitute(paste(nn, "mol/mol"), list(nn=k)) 
xlab <- bquote(.(k) * "mol/mol") 

plot(x,y, ylab = ylab, xlab = xlab) 

¿Qué hago mal? ¿Cómo obtener un símbolo griego para la etiqueta del eje a través de un vector?

+0

expresión es una función primitiva. No evalúa sus argumentos. – vinux

+1

¿Ayuda [este Q & A] (http://stackoverflow.com/questions/10042258/generate-a-list-of-expression-literals-from-an-integer-sequence)? – fotNelton

+0

@fotNelton: Esto no funcionaría al menos: ylab <- do.call ("expresión", lapply (k, función (i) sustituto (k * "mol/mol", lista (k = i)))) – Mikko

Respuesta

5

Prueba esto:

xlab = parse(text=paste(k, "*mol/mol")) 
+0

¿Alguien puede explicar por qué el '*' es necesario y para qué sirve? – Henrik

+0

Gracias, baptiste! – Mikko

+1

'? Plotmath' sugiere que se usa en' x * y' para "yuxtaponer xey", es decir, ponerlos uno después del otro (sin espacio). – baptiste

Cuestiones relacionadas