【问题标题】:Plot text containing "approximately equal to" in R在 R 中绘制包含“大约等于”的文本
【发布时间】:2012-03-09 21:14:40
【问题描述】:

我熟悉使用expression()bquote() 在 R 中的文本基础图形中绘制特殊的 Tex 之类的标记。但是如何在不让解析器抛出错误的情况下做到“大约等于”。我在确定标记时指的是?plotmath

plot(c(1,100), c(1,100), type="n", axes=FALSE, xlab="", ylab="")

# This works
text(50, 80, expression(paste("The area is 24 ", km^2)))

# This doesn't
text(50, 50, expression(paste("Reginald is ", %~~% , "14 years old")))

【问题讨论】:

    标签: r plotmath


    【解决方案1】:

    这应该可以解决问题:

    plot(c(1,100), c(1,100), type="n", axes=FALSE, xlab="", ylab="")
    text(50, 50, 
         expression(paste("Reginald is ", phantom() %~~% phantom(), "14 years old")))
    

    您的版本不起作用的原因是 %~~% 'operator' 期望成为表达式的一部分,其左侧和右侧都有某些内容。 phantom() 为您提供 (a) 不可见且 (b) 不占用宽度的东西 --- 正是您所需要的。

    编辑

    我每天都学到一些东西。 Brian Diggs 指出,在 cmets 中,您可以产生相同的效果,更简单的方法是省略表达式中的逗号(在这种情况下,您甚至不需要对 paste() 的嵌套调用)。这是更好的解决方案:

    text(50, 50, expression("Reginald is " %~~% "14 years old"))
    

    【讨论】:

    • 谢谢你,它有效。这是否记录在我错过的明显地方?
    • 不,这并不明显,而且当我第一次需要它时,我很难找到它。我想我是通过查看输入demo(plotmath) 显示的示例发现的。它在弹出的第三页上。它也包含在?plotmath 的功能列表中,但它的实用性并没有真正说明。
    • 在这种情况下,您可以使用字符串本身而不是phantom()text(50, 50, expression(paste("Reginald is " %~~% "14 years old")))
    • @BrianDiggs -- 非常好。谢谢。我已将您的建议的编辑版本添加到主帖中。无论出于何种原因,您的版本还帮助我第一次真正“获得”R 必须做的事情,以生成它添加到绘图中的数学注释。所以也谢谢你。
    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多