2012-03-09 107 views
2

我在使用expression()bquote()绘制R中文本基本图形中的特殊Tex类标记时很熟悉。但是如何做到“近似等于”而不会导致解析器抛出错误。确定标记时,我指的是?plotmath在R中绘制包含“大约等于”的文本

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

回答

9

这应该做的伎俩:

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

的原因,你的版本没有工作是,%~~%“运营商预计将表达式的一部分的东西它的两个左和其对。 phantom()为您提供了一个(a)看不见的东西,(b)不占用任何宽度---正是您需要的东西。

编辑

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

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

谢谢你,它的工作原理。这是否记录在某处显而易见,我错过了? – digitalmaps 2012-03-09 21:33:37

+0

不,这并不明显,我很难找到我第一次需要它的时间。我想我通过查看通过键入'demo(plotmath)'显示的示例来发现它。它弹出第三页。它也包含在'plotmath'功能列表中,但它的功能并没有被真正拼写出来。 – 2012-03-09 21:39:10

+4

在这种情况下,您可以使用字符串本身而不是'phantom()':'text(50,50,expression(paste(“Reginald is”%~~%“14 years old”)))' – 2012-03-09 21:48:42