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

如何在ggplot标注中将Pearson correlation设为斜体?(附iris示例)

解决ggplot标注中Pearson相关系数r的斜体显示问题

问题重现

你使用iris数据集绘制密度图,尝试用expression()让标注里的r(Pearson相关系数)变成斜体但未成功,原代码如下:

iris %>%    
ggplot(aes(Sepal.Length,
                 fill = Species))+
  geom_density(alpha = .6,
               bw = 0.5)+
  theme_classic()+
  annotate("text", 
           x = 7, 
           y = c(.55, .60),
           size = 4,
           label = c(
             paste0("Mean = ", round(mean(iris$Sepal.Length),4), " cm"),
             paste0("r = ", round(cor(iris$Sepal.Length, iris$Sepal.Width),2), "")
           ))

解决方案

要实现r的斜体显示,需要结合plotmath语法和parse = TRUE参数,让ggplot解析数学表达式。修改后的代码如下:

library(tidyverse)

iris %>%    
  ggplot(aes(Sepal.Length, fill = Species))+
  geom_density(alpha = .6, bw = 0.5)+
  theme_classic()+
  annotate("text", 
           x = 7, 
           y = c(.55, .60),
           size = 4,
           parse = TRUE, # 开启表达式解析
           label = c(
             # 用plotmath语法构造均值标注:==表示等式,~表示空格
             paste0("Mean == ", round(mean(iris$Sepal.Length),4), " ~ cm"),
             # 用bquote插入动态r值,转成字符串后合并
             bquote(r == .(round(cor(iris$Sepal.Length, iris$Sepal.Width),2))) %>% as.character()
           ))

关键说明

  1. parse = TRUE:告诉ggplot将label中的内容当作数学表达式解析,plotmath语法里的英文字母默认显示为斜体,因此r会自动变成斜体。
  2. plotmath语法规则:
    • 用==代替普通的=,否则会显示为赋值符号而非等式
    • 用~表示空格,用来分隔文本和数值(比如"Mean == 5.8433 ~ cm"会显示为Mean = 5.8433 cm)
  3. bquote():用于将外部计算的动态数值(比如相关系数的计算结果)插入到表达式中,.()用来引用外部变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:35:50