在绘图表达式中包含文本控制字符

Posted

技术标签:

【中文标题】在绘图表达式中包含文本控制字符【英文标题】:Include text control characters in plotmath expressions 【发布时间】:2013-02-24 05:20:59 【问题描述】:

有没有办法获取文本字符串的控制字符,例如"\n" 代表 newline 在 plotmath 表达式中求值,反之亦然。在下面的例子中,我想结合:

一些字符文本 文本控制字符(换行符) 替换变量名 包括一个绘图表达式

阅读this question 后,我可以使用替代品获得大部分的成功,但newline 字符未被评估。我现在在兜圈子,把自己和plotmathparsebquotesubstitute 搞混了。在 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 不支持其中的换行符,但您可以使用mtextbquote 来编写每一行。例如,我创建了一个行列表:

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

以上是关于在绘图表达式中包含文本控制字符的主要内容,如果未能解决你的问题,请参考以下文章

SQL中判断字符串中包含字符的方法

正则表达式判断字符串中包含数字、大写字符、小写字母、特殊符号中的几种怎么判断?

linux正则表达式

如何在正则表达式公式中包含括号作为谷歌表格中公式的一部分

如何在静态文本标签中包含特殊字符?

在正则表达式字符括号中包含连字符?