R - 非硬连线的绘图文本的文本格式

时间:2014-04-10 16:09:30

标签: r plot text-formatting

我想将格式化文本添加到图表(标题,轴标签,图例等)。标准的解决方案就是例如。

plot(1, 1, ylab=substitute(lambda[1]))

其中y轴标签将是带有下标1的希腊字母λ。这就是我想要的但不幸的是它是硬接线的。我希望它是灵活的,即可以选择将文本作为函数的参数传递。所以,看看r帮助,我发现substitute的论证是一个表达式。所以我试过了

sometext <- "lambda[1]"
e <- parse(text="sometext")
plot(1, 1, ylab=substitute(e))

但是substitute忽略了e是一个对象,只是打印文本'e'作为标签。所以我尝试了

plot(1, 1, ylab=eval(e))

这是更好的,因为eval至少评估表达式,但标签现在实际上是'lambda [1]',即它不被评估为具有下标的希腊字母λ。 然后我明确表示'e'是一个表达式

e <- expression(sometext)

并运行前两个绘图命令,但结果与之前相同。 我最接近我想要达到的目的是做

plot(1, 1, ylab=substitute(var[i], list(var="lambda", i=1)))

其中至少1作为下标打印,但打印文本'lambda'而不是希腊字母λ。

有关如何实现第一个命令但没有硬连接的任何建议?例如。使用字符串并以某种方式将其转换为正确的对象,以便它正确显示?感谢。

丹尼尔

2 个答案:

答案 0 :(得分:0)

您可以将标签作为表达式传递,然后在函数中使用substitute

dwat <- function(expr){

plot(1, 1, ylab = substitute(expr))

}

dwat(lambda[1])
dwat(mu[2])

如果要传递字符串而不是表达式,请使用parse

dwat_string <- function(string){

plot(1, 1, ylab = parse(text = string))

}

dwat_string("mu[1]")

另一种选择是使用省略号方法。这样你就可以将xlab或任何其他参数传递给plot

dwat2 <- function(...){

plot(1, 1, ...)

}

dwat2(ylab = expression(lambda[1]))

答案 1 :(得分:0)

你很亲密,检查一下是否有效

substitute(lambda[i],list(i=i))