在绘图表达式中包含文本控制字符
Posted
技术标签:
【中文标题】在绘图表达式中包含文本控制字符【英文标题】:Include text control characters in plotmath expressions 【发布时间】:2013-02-24 05:20:59 【问题描述】:有没有办法获取文本字符串的控制字符,例如"\n"
代表 newline
在 plotmath 表达式中求值,反之亦然。在下面的例子中,我想结合:
阅读this question 后,我可以使用替代品获得大部分的成功,但newline
字符未被评估。我现在在兜圈子,把自己和plotmath
、parse
、bquote
和substitute
搞混了。在 help page for plotmath 中它说
与普通绘图不同,控制字符(例如 \n)不会在 plotmath 的字符串中解释。
这是否意味着它真的不可能?
lab = "some data"
form = "Exponential"
x = 1:10
y = x^2
plot( x , y , type = "b" )
title( main = substitute( paste( "Plot of " , phi , " of: " , lab , "\nFunctional form: " , form ) , list(lab = lab , form = form ) ) , adj = 0 )
【问题讨论】:
【参考方案1】:如果您使用网格图形,那么following grob 可以用于根据线的高度来分隔线,
library(devtools)
source_gist(2732693)
grid.expr(as.expression(Lines))
(使用 agstudy 的台词)
【讨论】:
【参考方案2】:为了完整起见,这是另一个使用 unicode 且不使用表达式的解决方案(改编自 here 和 here):
plot(x, y, type="b")
title(main=paste("Plot of \u03A6 of:", lab, "\nFunctional form:", form), adj=0)
【讨论】:
+1 谢谢。这是一个很好的直接解决方案。我什至不知道可以包含这样的 unicode 字符。如果可以在这里为接受的答案分配信用,我会的。谢谢! 作为一个警告,一些平台/设备不能正确呈现所有 unicode 字符,所以你有 agstudy 和 baptiste 解决方案以及在它发生时依靠它是一件好事.有关其他提示,请参阅 this blog post。 啊,谢谢你的提醒。当我无法重新创建您的解决方案时,您可能会为我节省一些额外的未来头痛。再次感谢,感谢您的链接。【参考方案3】:如您所见,plotmath
不支持其中的换行符,但您可以使用mtext
和bquote
来编写每一行。例如,我创建了一个行列表:
Lines <- list(bquote(paste( "Plot of " , phi , " of: " , .(lab))),
bquote(paste("Functional form: " , .(form)))
mtext(do.call(expression, Lines),side=3,line=1:0)
【讨论】:
您的解决方案非常完美!非常感谢您为我涉足bquote
和数学/文本表达式的泥潭! +1以上是关于在绘图表达式中包含文本控制字符的主要内容,如果未能解决你的问题,请参考以下文章