如何使用多行将 x-axis 标签的部分(一个或两个单词)斜体化

How to italicize part (one or two words) of x-axis labels using multiple lines

(这是我在这个论坛上的第一个问题,如果不是很清楚,请提前道歉!)

我正在尝试重命名用 ggplot2 制作的图表的 x 轴标签,其方式如下:

  1. 它出现在两行中,并且
  2. 部分字符为斜体。

我找到了两个答案来帮助我解决这个问题,第一个是关于标题中的斜体 (How to italicize part (one or two words) of an axis title), the second regarding writing titles on two lines (Add line break to axis labels and ticks in ggplot)。

不幸的是,当我同时尝试这两种解决方案时,它不起作用。

我的案例有点复杂,所以让我用 mtcars 数据集向您展示一个简单的类似示例。

基本代码如下:

base <- mtcars %>% ggplot(aes(x = factor(cyl))) +
  geom_bar() +
  scale_y_continuous(breaks = 0:20) +
  xlab(NULL)

base

这给出了这个: Base graph

我要的是这个(我用Paint完成的): Desired graph

根据我的发现,我能做的最好的是:

addline_format <- function(x,...){
  gsub('\s','\n',x) 
  }

my_x_titles <- c(expression(paste("4 cylinders (", italic("N"), " = 11)")),
                 expression(paste("6 cylinders (", italic("N"), " = 7)")),
                 expression(paste("8 cylinders (", italic("N"), " = 14)")))

base + scale_x_discrete(breaks = c(4, 6, 8),
                        labels = addline_format(my_x_titles))

给出的东西不是很好: My not-great solution

使用自制的addline_format函数似乎阻止了italic函数的效果。此外,我希望标签只有两行(请参考我的 Desired solution picture),而不是多行,即使我使用了多个空格。

有人知道怎么解决吗?

您可以使用 atop作弊:

my_x_titles <- c(
  expression(atop(paste("4 cylinders"), (italic(N) == 11))),
  expression(atop(paste("6 cylinders"), (italic(N) == 7))),
  expression(atop(paste("8 cylinders"), (italic(N) == 14)))
)

base + scale_x_discrete(breaks = c(4, 6, 8),
                        labels = my_x_titles)