Combinando funções paste () e expression () em labels de plotagem

Considere este exemplo simples:

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

O que eu quero é que a input de caracteres definida pela variável ‘labName’, xLab ‘ou’ yLab ‘apareça ao lado do X ^ 2 ou y ^ 2 definido pela expressão (). Como está, o texto real ‘labName’ com um subscrito é unido à expressão sobrescrita.

Alguma ideia?

Uma solução alternativa para o @Aaron é a function bquote() . Precisamos fornecer uma expressão R válida, neste caso LABEL ~ x^2 por exemplo, onde LABEL é a string que você deseja atribuir do vetor labNames . bquote avalia o código R dentro da expressão envolvida em .( ) e substitui o resultado na expressão.

Aqui está um exemplo:

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

(Note que o ~ apenas adiciona um pouco de espaçamento, se você não quiser o espaço, substitua-o por * e as duas partes da expressão serão justapostas.)

Use substitute vez disso.

 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: adicionado um novo exemplo para ggplot2 no final

Veja plotmath para as diferentes operações matemáticas em R

Você deve poder usar a expressão sem colar. Se você usar o símbolo tilda (~) dentro da function expression, ele assumirá que existe um espaço entre os caracteres ou você poderá usar o símbolo * e ele não colocará um espaço entre os argumentos.

Às vezes você precisará alterar as margens em que você está colocando sobrescritos no eixo 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") 

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

Espero que você possa ver as diferenças entre os charts 1, 2 e 3 com os diferentes usos dos símbolos ~ e *. Uma nota extra, você pode usar outros símbolos, como traçar o símbolo de grau para temperaturas para ou mu, phi. Se você quiser adicionar um subscrito, use os colchetes.

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

insira a descrição da imagem aqui

Aqui está um exemplo ggplot usando a expressão com um exemplo sem sentido

 require(ggplot2) 

Ou, se você tiver a biblioteca do pacman instalada, poderá usar o p_load para baixar e carregar e append automaticamente os pacotes complementares.

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

insira a descrição da imagem aqui

Exemplo muito bom usando colar e substituto para compor os dois símbolos (mathplot) e variables ​​em http://vis.supstat.com/2013/04/mathematical-annotation-in-r/

Aqui está uma adaptação 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 eram expressões já dadas na variável ao quadrado, isso resolve o 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) 

Por favor, note o [[1]] por trás ao quadrado [1]. Ele fornece o conteúdo de "expressão (...)" entre os colchetes sem nenhum caractere de escape.