在绘图标签中组合paste()和expression()函数

时间:2011-02-11 20:49:30

标签: r plot

考虑这个简单的例子:

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'出现在由表达式()定义的X ^ 2或y ^ 2旁边。实际上,带有下标的实际文本“labName”将连接到上标表达式。

有什么想法吗?

4 个答案:

答案 0 :(得分:62)

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

(注意~只是添加一些间距,如果你不想要空格,用*替换它,表达式的两个部分将并列。)

答案 1 :(得分:26)

改为使用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])))

答案 2 :(得分:7)

非常好的示例使用paste和替换来排版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)

答案 3 :(得分:3)

如果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]。它为您提供&#34;表达式(...)&#34;括号之间没有任何转义字符。