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

Italic letters in generated axis tick labels

我在创建结合斜体字母和变量输入的轴刻度标签时遇到问题。 简单的说,我想调用变量,在每个标签下面插入文字比如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 = ""))

我的第一个想法是将 Unicode 用于斜体 N,就像我过去对上标数字所做的那样。但出于某种原因,这封信太小了,而且在文体上与文本的其余部分不匹配。更重要的是,在我的真实用例中,斜体 n 的所有 Unicode 字符似乎都没有对齐,在正常和下标之间的某个地方被压低。

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

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

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

我在 Whosebug 上搜索过类似案例。但是,其中 none 个需要调用变量:

Add greek letters to axis tick labels in R

How to italicize part (one or two words) of an axis title

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

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

如今,您可以使用 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())

reprex package (v2.0.0)

于 2021-10-16 创建

编辑上面 teunbrand 的答案,仅将 n 斜体化而不将计数本身斜体化:通过在 "<br><i>n = " 末尾添加 </i> 成为 "<br><i>n </i>= "

标签将是: paste0(levels(mpg$class), "<br><i>n</i> = ", counts)

而不是: paste0(levels(mpg$class), "<br><i>n = ", counts, "</i>")

library(ggplot2)
library(ggtext)

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

# italicized count
ggplot(mpg, aes(class, hwy)) +
  geom_boxplot() +
  scale_x_discrete(
    labels = paste0(levels(mpg$class), "<br><i>n = ", counts,"</i>")
  ) +
  theme(axis.text.x = ggtext::element_markdown())


# not italicized count
ggplot(mpg, aes(class, hwy)) +
  geom_boxplot() +
  scale_x_discrete(
    labels = paste0(levels(mpg$class), "<br><i>n</i> = ", counts) 
  ) +
  theme(axis.text.x = element_markdown())

斜体计数

非斜体计数