Program Club

플롯 레이블에서 paste () 및 expression () 함수 결합

proclub 2020. 11. 30. 20:12
반응형

플롯 레이블에서 paste () 및 expression () 함수 결합


이 간단한 예를 고려하십시오.

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

내가 원하는 것은 'labName,'xLab '또는'yLab '변수로 정의 된 문자 항목이 expression ()에 의해 정의 된 X ^ 2 또는 y ^ 2 옆에 나타나는 것입니다. 그대로 아래 첨자가있는 실제 텍스트 'labName'이 위 첨자 표현식에 결합됩니다.

이견있는 사람?


@Aaron의 대안 솔루션은 bquote()함수입니다. 유효한 R 표현식을 제공해야합니다.이 경우 LABEL ~ x^2예를 들어 LABEL벡터에서 할당하려는 문자열은 어디에 있습니까 labNames? bquote래핑 된 식 내에서 R 코드를 평가 .( )하고 결과를 식으로 대체합니다.

다음은 그 예입니다.

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

( ~단지 약간의 간격을 추가합니다. 공간이 필요하지 않으면 *로 바꾸면 표현식의 두 부분이 나란히 배치됩니다.)


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

편집 : 끝에 ggplot2에 대한 새 예제 추가

R의 다양한 수학적 연산 ? plotmath참조하십시오 .

붙여 넣기없이 표현을 사용할 수 있어야합니다. 표현식 함수 내에서 tilda (~) 기호를 사용하면 문자 사이에 공백이 있다고 가정하거나 * 기호를 사용할 수 있으며 인수 사이에 공백을 넣지 않습니다.

경우에 따라 y 축에 위 첨자를 넣을 때 여백을 변경해야합니다.

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

여기에 이미지 설명 입력

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

여기에 이미지 설명 입력

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

여기에 이미지 설명 입력

~ 및 * 기호를 다른 용도로 사용하여 플롯 1, 2 및 3의 차이점을 확인할 수 있기를 바랍니다. 추가 참고 사항, 온도 또는 mu, phi에 대한도 기호를 플로팅하는 것과 같은 다른 기호를 사용할 수 있습니다. 아래 첨자를 추가하려면 대괄호를 사용하십시오.

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

여기에 이미지 설명 입력

다음은 말도 안되는 예제와 함께 표현식을 사용하는 ggplot 예제입니다.

require(ggplot2)

또는 pacman 라이브러리가 설치되어있는 경우 p_load를 사용하여 애드온 패키지를 자동으로 다운로드하고로드하고 첨부 할 수 있습니다.

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

여기에 이미지 설명 입력


http://vis.supstat.com/2013/04/mathematical-annotation-in-r/ 에서 붙여 넣기 및 대체를 사용하여 기호 (mathplot)와 변수를 모두 조판하는 아주 좋은 예

다음은 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)

x ^ 2와 y ^ 2가 이미 변수 제곱에 주어진 표현식이라면, 이것은 문제를 해결합니다 :

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)

제곱 뒤에있는 [[1]] [1]에 유의하십시오. 이스케이프 문자없이 대괄호 사이에 "expression (...)"의 내용을 제공합니다.

참고 URL : https://stackoverflow.com/questions/4973898/combining-paste-and-expression-functions-in-plot-labels

반응형