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

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包渲染标签,写法更灵活易懂。

步骤与示例代码

  1. 先安装并加载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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:36:24