图例中的 R 平方和 n

R-squared and n in plot legend

我希望绘图图例包含 R 平方值和另一个值(数据点的数量,n,在这种情况下,但它不是特别重要)。我想要 R^2 = 格式的 R 平方,其中 R 是斜体,2 是上标。

可以在以下示例中使用 bquote

以这种方式单独添加 R 平方
DF <- data.frame(VAR1=rnorm(100), VAR2=rnorm(100))
with(DF, plot(VAR1, VAR2))
fit <- lm(VAR2 ~ VAR1, data=DF)
r2 <- summary(fit)$adj.r.squared
mylabel = bquote(italic(R)^2 == .(format(r2, digits = 2)))
legend("bottomright", legend = mylabel ) # display legend

可以通过以下方式添加 R 平方值和 n(感谢@DirkEddelbuettel How can I plot my R Squared value on my scatterplot using R?

legend("topleft", legend = c( paste("R2 =", format(r2, digits = 2)),
                              paste("n = ", nrow(DF)) ) )

但是,我无法找到一种方法来修改此设置以不粘贴调用的方式格式化 R^2。例如,

legend("topleft", legend = c( expression(paste(italic(R)^2, " = ", format(r2, digits = 2))),
                          paste("n = ", nrow(DF)) ) )

将成功格式化 R^2 但也会粘贴 format(r2, digits = 2)

这似乎应该很简单,但我并不高兴。非常感谢任何帮助,谢谢。

这里有一个方法,使用 atop 分割成几行。

# your code
DF <- data.frame(VAR1=rnorm(100), VAR2=rnorm(100))
with(DF, plot(VAR1, VAR2))
fit <- lm(VAR2 ~ VAR1, data=DF)
r2 <- summary(fit)$adj.r.squared
mylabel = bquote(italic(R)^2 == .(format(r2, digits = 2)))

# the legend
legend("topright", legend=bquote(atop(italic(R)^2 == .(format(r2, digits = 2)),"n" == .(nrow(DF)))),bty="n")

请注意,我不得不删除图例 (bty=n") 周围的方框,因为它管理不善。 对于涉及 mtext 的另一个解决方案,您可能对堆栈上的另外两个 post 和那里的所有链接感兴趣:

Expression and new line in plot labels

Line break in expression()?