R语言ggplot2:用变量文本生成含R²上标的绘图标签
在ggplot2标签中添加带R²上标的动态文本
嘿,我来帮你解决在ggplot绘图标签里显示带R²上标,同时结合变量文本的问题!这里有两种实用的方法,你可以根据自己的习惯选择:
方法一:用bquote()实现上标(无需额外包)
bquote()可以帮你把变量值和数学表达式(比如上标)无缝结合,完美适配ggplot的标签系统,不用额外安装包。
修改后的函数示例
library(ggplot2) library(extrafont) loadfonts(device = "win") dims = read.csv("example.csv") write_graph <- function(x, y, colour, r_squared) { # 别用attach啦,容易引发变量冲突,用aes_string更稳妥 plot1 <- ggplot(dims, aes_string(x = x, y = y, fill = colour)) + geom_boxplot() + labs( fill = colour, # 注意:你用的是fill美学,图例标题要对应fill参数 # 把x、y变量名和R²值整合到标题里 title = bquote(.("变量关系:") ~ .(x) ~ " vs " ~ .(y) ~ " | " ~ R^2 ~ " = " ~ .(round(r_squared, 2))) ) + scale_fill_grey(start = 0.3, end = 0.6) + theme_bw() + theme( legend.justification = c(1, 1), legend.position = c(1, 1) ) # 可添加保存图片的逻辑 ggsave(paste0(x, "_vs_", y, "_plot.png"), plot1) } # 调用示例:先通过线性回归计算R²值 model <- lm(dims$y_column ~ dims$x_column) r_sq_value <- summary(model)$r.squared write_graph(x = "x_column", y = "y_column", colour = "group_column", r_squared = r_sq_value)
关键说明
R^2:这是表达式里的上标写法,^后面的内容会自动变成上标.(变量名):把变量的实际值插入到表达式中,比如.(x)会替换成你传入的x变量名,.(round(r_squared,2))会显示保留两位小数的R²值~:用来添加空格,让文本排版更美观
方法二:用ggtext的Markdown格式(更直观)
如果你熟悉Markdown的上标语法(R<sup>2</sup>),可以用ggtext包渲染标签,写法更灵活易懂。
步骤与示例代码
- 先安装并加载ggtext包,然后修改theme让标签支持Markdown渲染:
library(ggplot2) library(extrafont) library(ggtext) # 新增依赖包 loadfonts(device = "win") dims = read.csv("example.csv") write_graph <- function(x, y, colour, r_squared) { # 用.data索引是ggplot3.0+更推荐的动态变量引用方式 plot1 <- ggplot(dims, aes(x = .data[[x]], y = .data[[y]], fill = .data[[colour]])) + geom_boxplot() + labs( fill = colour, # 直接用paste拼接Markdown格式的文本 title = paste("变量关系:", x, " vs ", y, " | R<sup>2</sup> = ", round(r_squared, 2)) ) + scale_fill_grey(start = 0.3, end = 0.6) + theme_bw() + theme( legend.justification = c(1, 1), legend.position = c(1, 1), # 开启标签的Markdown渲染功能 plot.title = element_markdown() ) ggsave(paste0(x, "_vs_", y, "_plot.png"), plot1) } # 调用示例 model <- lm(dims$y_column ~ dims$x_column) r_sq_value <- summary(model)$r.squared write_graph(x = "x_column", y = "y_column", colour = "group_column", r_squared = r_sq_value)
关键说明
R<sup>2</sup>:Markdown的上标写法,只要开启element_markdown()就会被渲染成R²element_markdown():可以指定任意标签元素支持Markdown,比如axis.title.x、subtitle等都适用.data[[x]]:比aes_string更安全,能避免变量名冲突问题
额外小提醒
- 尽量避免使用
attach(dims),它会把数据框的变量暴露到全局环境,很容易和其他变量重名导致错误 - 如果你的R²值是手动指定的,直接把数值传入函数即可,不用额外计算
内容的提问来源于stack exchange,提问作者Shakir
相关产品推荐
相关产品推荐

