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

如何在ggcorrplot生成的相关矩阵中正确设置上下标标签?

如何在ggcorrplot中正确显示带上下标的标签(不使用Unicode)

问题描述

尝试用ggcorrplot包自定义相关矩阵的标签,但上下标格式无法正常显示,希望在不使用Unicode字符的前提下解决这个问题。

尝试1:格式显示异常

library(tidyverse)
library(ggcorrplot)

# 示例数据
M <- cor(mtcars)[1:3,1:3]

# 设置列名与行名
colnames(M) <- c("Temperature\n (^o C)", "PO[4]^2", "Oxygen\n (mg L^-1)")
rownames(M) <- c("Temperature\n (^o C)", "PO[4]^2", "Oxygen\n (mg L^-1)")

ggcorrplot(M,
           type = "lower",
           lab = TRUE,
           ggtheme = theme_bw())

显示异常的相关矩阵

尝试2:代码报错

ggcorrplot(M,
           type = "lower",
           lab = TRUE,
           scale_x_discrete(labels = c("mpg" = expression(Temperature~(degree*C)),
                                       "cyl" = expression(PO[4]^2),
                                       "disp" = expression(Oxygen~(mg~L^-1)))),
           scale_y_discrete(labels = c("mpg" = expression(Temperature~(degree*C)),
                                       "cyl" = expression(PO[4]^2),
                                       "disp" = expression(Oxygen~(mg~L^-1)))),
           ggtheme = theme_bw())

错误于match.arg(method): 'arg'必须为NULL或字符向量


解决方案

ggcorrplot本身不支持直接传入expression类型的标签,但可以通过先绘制基础图、再手动替换坐标轴标签的方式解决:

步骤1:绘制基础相关矩阵图

先保留矩阵的原始列名/行名,正常生成ggcorrplot对象:

library(tidyverse)
library(ggcorrplot)

M <- cor(mtcars)[1:3,1:3]
# 用原始列名/行名便于后续匹配
colnames(M) <- c("mpg", "cyl", "disp")
rownames(M) <- c("mpg", "cyl", "disp")

p <- ggcorrplot(M,
           type = "lower",
           lab = TRUE,
           ggtheme = theme_bw())

步骤2:解析表达式替换标签

利用ggplot2的图层扩展功能,通过scale_x_discrete和scale_y_discrete设置标签,并开启parse = TRUE让系统解析表达式格式:

p +
  scale_x_discrete(labels = c(
    "mpg" = "Temperature~(degree*C)",
    "cyl" = "PO[4]^2",
    "disp" = "Oxygen~(mg~L^-1)"
  ), parse = TRUE) +
  scale_y_discrete(labels = c(
    "mpg" = "Temperature~(degree*C)",
    "cyl" = "PO[4]^2",
    "disp" = "Oxygen~(mg~L^-1)"
  ), parse = TRUE)

也可以直接传入expression对象:

p +
  scale_x_discrete(labels = expression(
    Temperature~(degree*C), PO[4]^2, Oxygen~(mg~L^-1)
  ), parse = TRUE) +
  scale_y_discrete(labels = expression(
    Temperature~(degree*C), PO[4]^2, Oxygen~(mg~L^-1)
  ), parse = TRUE)

核心原理

  • ggcorrplot返回的是标准ggplot对象,因此可以叠加ggplot2的图层修改元素
  • parse = TRUE会让ggplot将字符串或expression对象解析为绘图专用表达式,支持上下标、特殊符号(如degree对应摄氏度符号)
  • 避免直接在矩阵列名/行名中写入格式标记,通过坐标轴标签解析实现正确渲染

内容的提问来源于stack exchange,提问作者tassones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:30:54