【问题标题】:R-squared and n in plot legend图例中的 R 平方和 n
【发布时间】:2016-06-18 08:37:29
【问题描述】:

我想要一个图例既包含 R 平方值,又包含另一个值(在本例中为数据点的数量,n,但这并不是特别重要)。我想要格式为 R^2 = 的 R 平方,其中 R 为斜体,2 为上标。

以这种方式单独添加 R 平方可以在以下示例中使用 bquote 实现

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)

这似乎应该是直截了当的,但我没有快乐。任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 这可能会帮助你lukemiller.org/index.php/2012/10/…
  • 请参阅 here 以了解此问题的可能副本和可行的答案。
  • 感谢你们让我注意到这些解决方案。两者都按需要工作,尽管@JWilliman 提到的解决方案更简单,因此更可取。为了完整起见,该解决方案(@SvenHohenstein)是legend("bottomright", c(as.expression(bquote(italic(R)^2 == .(format(r2, digits = 2)))), as.expression(paste("n =", nrow(DF)))))

标签: r plot legend


【解决方案1】:

这是一种方法,使用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 的另一个解决方案,您可能对堆栈上的另外两个帖子以及那里的所有链接感兴趣:

Expression and new line in plot labels

Line break in expression()?

【讨论】:

  • 感谢@Eric,这可以完成工作,虽然不确定atop 是否允许多个图例项目(为了通用性)
猜你喜欢
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 2015-12-09
  • 2022-12-01
  • 2012-06-11
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多