You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言的plot或ggplot中添加含R2、RMSE、n指标的文本并配置方形绘图?

如何在R语言的plot或ggplot中添加含R2、RMSE、n指标的文本并配置方形绘图?

别担心,这问题其实不难解决!我分base R和ggplot2两种常用绘图方式给你讲清楚,既能把R²、RMSE、n这些指标以多行文本的形式加到图里,还能轻松实现方形绘图。

一、用Base R实现

先模拟一组数据和指标(你直接替换成自己的实际数据和计算好的R2、RMSE、n就行):

# 模拟示例数据
set.seed(123)
actual <- rnorm(50, 10, 2)
predicted <- actual + rnorm(50, 0, 1)

# 你的独立指标对象(替换成你自己的即可)
R2 <- cor(actual, predicted)^2
RMSE <- sqrt(mean((actual - predicted)^2))
n <- length(actual)

接下来一步步做图:

  1. 绘制方形散点图:在plot()函数里加asp = 1参数,强制x轴和y轴比例一致,直接得到方形图。
  2. 添加参考线:用abline()画一条y=x的红线,方便对比实际和预测值。
  3. 组合多行文本标签:用paste0()把三个指标拼接起来,用\n实现换行,让每个指标占一行。
  4. 定位添加文本:用text()函数把标签放到你想要的位置(比如左上角),通过adj参数调整对齐方式,避免被散点挡住。

完整代码:

# 绘制方形散点图
plot(actual, predicted, asp = 1, main = "Actual vs Predicted", 
     xlab = "Actual", ylab = "Predicted", pch = 16, col = "#2E8B57")

# 添加y=x参考线
abline(0, 1, col = "#FF0000", lwd = 2)

# 组合多行文本标签
text_label <- paste0("R² = ", round(R2, 2), "\nRMSE = ", round(RMSE, 2), "\nn = ", n)

# 把文本放到左上角,左对齐+上对齐
text(x = min(actual), y = max(predicted), labels = text_label, 
     adj = c(0, 1), cex = 0.9, col = "#00008B")

二、用ggplot2实现

如果你习惯用ggplot2,步骤也类似,样式还更灵活:

还是用刚才的模拟数据,然后:

  1. 构建数据框:把实际值和预测值放到数据框里,符合ggplot的语法要求。
  2. 绘制散点图和参考线:用geom_point()和geom_abline()实现基础绘图元素。
  3. 设置方形绘图:用coord_fixed(ratio = 1)强制纵横比为1,这个比theme(aspect.ratio = 1)更稳定,不会因为窗口大小变化而变形。
  4. 添加多行文本:用annotate("text")添加标签,通过hjust和vjust调整对齐,定位到合适的位置。

完整代码:

library(ggplot2)

# 把数据整理成数据框
df <- data.frame(actual = actual, predicted = predicted)

# 组合多行文本标签
text_label <- paste0("R² = ", round(R2, 2), "\nRMSE = ", round(RMSE, 2), "\nn = ", n)

# 绘制方形图并添加文本
ggplot(df, aes(x = actual, y = predicted)) +
  geom_point(color = "#2E8B57", size = 2) +
  geom_abline(slope = 1, intercept = 0, color = "#FF0000", linewidth = 1) +
  labs(title = "Actual vs Predicted", x = "Actual", y = "Predicted") +
  # 强制方形绘图
  coord_fixed(ratio = 1) +
  # 添加文本到左上角,左对齐+上对齐
  annotate("text", x = min(df$actual), y = max(df$predicted), 
           label = text_label, hjust = 0, vjust = 1, size = 3.5, color = "#00008B") +
  theme_bw()

小技巧补充

  • 位置调整:如果左上角的文本被散点挡住了,可以把x改成quantile(actual, 0.1)(实际值的10分位数),y改成quantile(predicted, 0.9)(预测值的90分位数),这样位置更稳妥。
  • 文本样式:可以调整cex(base R)或size(ggplot)改变字体大小,用font(base R)或face(ggplot)设置粗体/斜体,让文本更美观。

备注:内容来源于stack exchange,提问作者Martín Francia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:07:58