Combinando le funzioni paste () ed expression () nelle etichette plot

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

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

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 *")")) 

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

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.