Considera questo semplice esempio:
labNames <- c('xLab','yLabl') plot(c(1:10),xlab=expression(paste(labName[1], x^2)),ylab=expression(paste(labName[2], y^2)))
Quello che voglio è che la voce di carattere definita dalla variabile ‘labName,’ xLab ‘o’ yLab ‘appaia accanto a X ^ 2 o y ^ 2 definita da expression (). Così com’è, il testo attuale “labName” con un pedice è unito all’espressione in apice.
qualche idea?
Una soluzione alternativa a quella di @Aaron è la funzione bquote()
. È necessario fornire un’espressione R valida, in questo caso LABEL ~ x^2
ad esempio, dove LABEL
è la stringa che si desidera assegnare dal vettore labNames
. bquote
valuta il codice R all’interno dell’espressione bquote
in .( )
e sostituisce il risultato nell’espressione.
Ecco un esempio:
labNames <- c('xLab','yLab') xlab <- bquote(.(labNames[1]) ~ x^2) ylab <- bquote(.(labNames[2]) ~ y^2) plot(c(1:10), xlab = xlab, ylab = ylab)
(Nota: ~
aggiunge solo un po 'di spaziatura, se non vuoi lo spazio, sostituiscilo con *
e le due parti dell'espressione saranno giustapposte.)
Usa invece il substitute
.
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])))
EDIT: aggiunto un nuovo esempio per ggplot2 alla fine
Vedere ? Plotmath per le diverse operazioni matematiche in R
Dovresti essere in grado di usare espressioni senza incollare. Se usi il simbolo tilda (~) all’interno della funzione expression, assumerà che ci sia uno spazio tra i caratteri, o potresti usare il simbolo * e non metterà uno spazio tra gli argomenti
A volte dovrai cambiare i margini mentre stai mettendo degli apici sull’asse delle 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")
plot(c(1:10), xlab = expression(xLab * x^2 * m^-2), ylab = expression(yLab * y^2 * m^-2), main="Plot 2")
plot(c(1:10), xlab = expression(xLab ~ x^2 * m^-2), ylab = expression(yLab ~ y^2 * m^-2), main="Plot 3")
Spero che tu possa vedere le differenze tra i grafici 1, 2 e 3 con i diversi usi dei simboli ~ e *. Una nota in più, è ansible utilizzare altri simboli, come ad esempio il simbolo del grado per temperature per o mu, phi. Se vuoi aggiungere un pedice usa le parentesi quadre.
plot(c(1:10), xlab = expression('Your x label' ~ mu[3] * phi), ylab = expression("Temperature (" * degree * C *")"))
Ecco un esempio di ggplot che utilizza l’espressione con un esempio senza senso
require(ggplot2)
Oppure se hai la libreria di pacman installata puoi usare p_load per scaricare e caricare automaticamente e colbind i pacchetti aggiuntivi
# 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()
Esempio molto bello con l’uso di pasta e sostituzione per la composizione di entrambi i simboli (mathplot) e variabili su http://vis.supstat.com/2013/04/mathematical-annotation-in-r/
Ecco un adattamento 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)
Se x ^ 2 e y ^ 2 erano espressioni già date nella variabile al quadrato, questo risolve il 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)
Si prega di notare [[1]] dietro al quadrato [1]. Ti dà il contenuto di "espressione (...)" tra parentesi senza caratteri di escape.