如何在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)
接下来一步步做图:
- 绘制方形散点图:在
plot()函数里加asp = 1参数,强制x轴和y轴比例一致,直接得到方形图。 - 添加参考线:用
abline()画一条y=x的红线,方便对比实际和预测值。 - 组合多行文本标签:用
paste0()把三个指标拼接起来,用\n实现换行,让每个指标占一行。 - 定位添加文本:用
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,步骤也类似,样式还更灵活:
还是用刚才的模拟数据,然后:
- 构建数据框:把实际值和预测值放到数据框里,符合ggplot的语法要求。
- 绘制散点图和参考线:用
geom_point()和geom_abline()实现基础绘图元素。 - 设置方形绘图:用
coord_fixed(ratio = 1)强制纵横比为1,这个比theme(aspect.ratio = 1)更稳定,不会因为窗口大小变化而变形。 - 添加多行文本:用
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
相关产品推荐
相关产品推荐

