如何在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() ))
关键说明
parse = TRUE:告诉ggplot将label中的内容当作数学表达式解析,plotmath语法里的英文字母默认显示为斜体,因此r会自动变成斜体。- plotmath语法规则:
- 用
==代替普通的=,否则会显示为赋值符号而非等式 - 用
~表示空格,用来分隔文本和数值(比如"Mean == 5.8433 ~ cm"会显示为Mean = 5.8433 cm)
- 用
bquote():用于将外部计算的动态数值(比如相关系数的计算结果)插入到表达式中,.()用来引用外部变量。
内容的提问来源于stack exchange,提问作者Matheus Pacheco
相关产品推荐
相关产品推荐

