【问题标题】:R - Text Formatting of Plot Text that is not hard-wiredR - 非硬连线的绘图文本的文本格式
【发布时间】:2014-04-10 16:09:29
【问题描述】:

我想在绘图中添加格式化文本(标题、轴标签、图例等)。标准解决方案是例如

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' 而不是希腊字母 λ。

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

丹尼尔

【问题讨论】:

    标签: r plot text-formatting


    【解决方案1】:

    您可以像这样将标签作为表达式传递,然后在函数内使用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]))
    

    【讨论】:

    • 这是一个相关的 r-help 讨论以及另一个选项:r.789695.n4.nabble.com/…
    • 谢谢。您的解决方案确实提供了更大的灵活性。我仍然更喜欢使用字符串指定标签(假设我需要从 csv 文件中读取标签)但也许这是不可能的。如果没有人给出我更喜欢的答案,我会采纳你的建议。
    • 抱歉,错过了关于字符串的部分。将相应地编辑响应。
    • 谢谢!我非常接近我在我的问题中给出的例子。 ylab 参数中不需要substituteeval,我应该使用parse(text=sometext),即不需要引号。
    【解决方案2】:

    你很接近,检查这是否有效

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

    【讨论】:

    • 嗯,这会产生我想要的标签,但是它是硬连线的,即我不能以编程方式将 lambda 符号更改为其他东西。所以它有效,但不是我想要的。但是,谢谢。
    猜你喜欢
    • 2013-12-17
    • 2021-05-21
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多