在绘图标签中使用表达式和换行

22

我想在图表标签中添加一些下标和上标。我尝试过使用expression,但它不能按照我希望的方式处理换行符(\n)。我也试图使用paste来解决它,但是它无法达到预期效果。以下是我的一些尝试:

par(mfcol=c(1,3))
plot(1,1,main=expression("first line \n second line x"^2))
plot(1,1,main=expression(paste("first line \n second line", "x"^2)))
plot(1,1,main=paste("first line \n second line", expression("x"^2)))

它产生:

enter image description here

在前两张图片中,第二行没有居中对齐,在第三张图片中上标未能正常显示。如何使得两行文本都居中对齐,并且上下标都能正确显示?


1
此外:https://dev59.com/LGUp5IYBdhLWcg3wZHAc?lq=1 和 https://dev59.com/9mrWa4cB1Zd3GeqP-WCS 是关于同一主题的问题。 - plannapus
1
点赞:这张图片立刻告诉你,你找到了正确的问题 :) - BurninLeo
2个回答

28

你可以在表达式中引入换行:

bquote(atop("first line",
            "second line" ~ x ^ 2))

(这里我使用bquote而不是expression - 两者在此情况下均可工作。)

执行demo(plotmath)以获取更多信息,并查看atop的文档。

boxplot显然在其标题中解释表达式时存在一些问题。 简单的解决方法是将标题单独绘制:

boxplot(data, main = '')
title(bquote(atop("first line", "second line" ~ x ^ 2)))

2
很奇怪: 这个解决方案在使用 plot 时运行良好,但在使用 boxplot 时却无法运行。我收到了一个消息,称没有名为'atop'的函数。 - Marta Cz-C
@MartaCz-C 好奇心是好的。不过,修复方法非常简单 - 请参见更新的答案。 - Konrad Rudolph

12

一个快速的解决方案是在单词“first”之前添加一些空格。

由于plotmath不支持换行,因此您可以像这样逐个创建每一行使用mtext

plot(1,1)
exp <- 2
Lines <- list(bquote("first line"),bquote("second line x"^2))
mtext(do.call(expression, Lines),side=3,line=1:0)

在此输入图片描述


2
我想我以前在某个地方看到过这个(https://dev59.com/LGUp5IYBdhLWcg3wZHAc#15300449)...!(它仍然是一个很好的答案) - Simon O'Hanlon
@SimonO101 谢谢并且发现得好 :) - agstudy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接