使用 R 基础,如何使用表达式、粘贴、bquote 和/或替换为绘图构建可变参数标题?

问题描述

对于回归图,我希望标题如下:

hat(y) = mx + b
F_{df1,df2} = Fval,p = pval
R^2 = rval

其中 mbdf1df2Fval 以及 pvalrval 是可变填充的。

我可以获取这些变量的所有值,似乎 (.df1) 是我在表达式循环中创建它们的方式,参见 https://astrostatistics.psu.edu/su07/R/html/grDevices/html/plotmath.html

m = 3;
b = 5;
df1 = 1;
df2 = 98;
Fval = 1.0189e+32; # big
pval = 0.9998;
rval = 0.86;

我想构建一个变量 myMain,我可以将它作为主标题放入绘图中。三行将用“\n”换行分隔。

使用 paste0,没问题:

myMain = paste0(
    "y = ",round(m,3),"x + ",round(b,"\n","F(",df1,df2,") = ",Fval,",p = ",pval,"R^2 = ",rval);

但我想在 F 和 R^2 上使用上标/下标,也喜欢 F、p 和 R^2 的斜体选项。

我正在寻找可变参数解决方案,因为这是一类问题。在其他时候,我可能需要“化学”符号等。目标是创建一个可以在“标题”或“标签”或“图例”或其他地方使用的变量。

https://astrostatistics.psu.edu/su07/R/html/grDevices/html/plotmath.html

这是最好的参考,讨论了 expressionbquotesubstitutemtextplain 等等。

如何将其包装成通用函数

(1) 我有一个模板:

hat(y) = mx + b
F_{df1,p = pval
R^2 = rval

(2) 我有一个要“替换”的值列表:

m = 3;
b = 5;
df1 = 1;
df2 = 98;
Fval = 1.0189e+32; # big
pval = 0.9998;
rval = 0.86;

(3) 并且它保持了很好的 expression 格式?

做 1/2 很简单,问题的最后一个子元素是我挣扎的地方。我可以发布最后的三阶段解决方案,在第 3 步有一点帮助。

解决方法

我们可以将 atopbquote 一起使用

space <- strrep(' ',40)
space2 <- strrep(' ',43)
plot(1,1,main = bquote(atop(atop(y==~.(round(m,3))*'x + '~.(b)*.(space)*phantom(),'F('*.(df1)*','*.(df2)*') = '~.(Fval)~',p = '*.(pval)*phantom()),scriptstyle(R^2 ==.(rval)*.(space2)))))

-输出

enter image description here