生成的轴刻度标签中的斜体字母

R. *_*ämö 7 r ggplot2 italic plotmath

我在创建结合斜体字母和变量输入的轴刻度标签时遇到问题。简单地说,我想调用变量并在每个标签下方插入诸如n = 1之类的文本。

这是一个除了斜体n之外的所有内容的示例:

require(ggplot2)

mpg$class <- as.factor(mpg$class)
counts <- rep(1:7, 1)

ggplot(mpg, aes(class, hwy)) +
  geom_boxplot() +
  scale_x_discrete(labels = paste(levels(mpg$class), "\nn = ", counts, sep = ""))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我的第一个想法是使用 Unicode 表示斜体 N,就像我过去对上标数字所做的那样。但由于某种原因,这封信太小并且在风格上与文本的其余部分不匹配。更重要的是,在我的实际用例中,斜体 n 的所有 Unicode 字符似乎都呈现不对齐,在正常和下标之间的某个位置凹陷。

ggplot(mpg, aes(class, hwy)) +
  geom_boxplot() +
  scale_x_discrete(labels = paste(levels(mpg$class), "\n\U1D45B = ", counts, sep = ""))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所以,我发现这个plotmath函数~italic(x)可以用来将字母变成斜体。paste()然而,当我将它合并到 x 轴刻度标签的行中时,出现了明显且意外的失败。请注意,该函数确实适用于xlab()

ggplot(mpg, aes(class, hwy)) +
  geom_boxplot() + xlab(~italic("n")) +
  scale_x_discrete(labels = paste(levels(mpg$class), "\n", ~italic("n"), " = ", counts, sep = ""))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我在 StackOverflow 上搜索过类似的案例。然而,它们都不需要调用变量:

将希腊字母添加到 R 中的轴刻度标签

将轴刻度标签中的一个字符更改为斜体,同时保留多行

如何在不添加空格的情况下将R图中的一个字母更改为斜体样式

如何将轴标题的部分(一个或两个单词)设置为斜体

我尝试了解如何使用expression()bquote()并同时能够调用变量,但我无法产生任何功能。

此时,非常感谢任何帮助!

teu*_*and 4

如今,您可以使用 ggtext 包通过一些 markdown/html 装饰来设置文本样式。

library(ggplot2)
library(ggtext)
#> Warning: package 'ggtext' was built under R version 4.1.1

mpg$class <- as.factor(mpg$class)
counts <- rep(1:7, 1)

ggplot(mpg, aes(class, hwy)) +
  geom_boxplot() +
  scale_x_discrete(
    labels = paste0(levels(mpg$class), "<br><i>n = ", counts, "</i>")
  ) +
  theme(axis.text.x = element_markdown())
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2021 年 10 月 16 日创建(v2.0.0)