ggplot 中有没有办法在具有不同字体类型的相同 x 轴标签中有 2 个不同的变量?

Is there a way in ggplot to have 2 different variables in same x axis labels with different font type?

我正在尝试在 ggplot 的 x 轴标签中使用不同的字体。从下面的link:X-axis tick labels different font size and font face ggplot可以看出,很可能是bquote和atop。但是,我不完全确定该怎么做。

以下是堆栈溢出的一些代码:

group_name = sprintf("A[%i*x]", rep(1:4,each=2))
group_name3 = sprintf("A[%j*x]", rep(1:4,each=2))

make_labels2 <- function(value) {
  x <- as.character(value)
  do.call(expression, lapply(x, function(y) bquote(atop(bold(.(y)), "this"~italic("degree")~x))))
}


mydata2 <- data.frame(mygroup = group_name, 
                      mygroup3 = group_name3,
                      mysubgroup = factor(c("Yes", "No"), 
                                          levels = c("Yes", "No")), 
                      value = c(60,40,90,10,55,45,88,12))

ggplot(mydata2, aes(mygroup, value, fill = mysubgroup)) + 
  geom_bar(position = "dodge", width = 0.5, stat = "identity")+ 
  coord_flip() + 
  scale_x_discrete(labels = make_labels2)

我希望能够使用 group_name3 并将其连接到 group_name。努力寻找最好的方法。 group_name3 不加粗。

非常感谢任何帮助。

提前致谢。

也许您正在寻找这个

group_name = sprintf("A[%i*x]", rep(1:4,each=2))
group_name3 = sprintf("A[%i*y]", rep(1:4,each=2))

make_labels2 <- function(value) {
  x <- as.character(value)
  #do.call(expression, lapply(x, function(y) bquote(atop(bold(.(y)), "this"~italic("degree")~x)) ))
  do.call(expression, lapply(x, function(y) bquote(atop(bold(.(strsplit(y,split="_")[[1]][[1]]))~"_"~italic(.(strsplit(y,split="_")[[1]][[2]])), "this"~italic("degree")~x)) ))
}

mydata2 <- data.frame(mygroup = group_name, 
                      mygroup3 = group_name3,
                      mysubgroup = factor(c("Yes", "No"), 
                                          levels = c("Yes", "No")), 
                      value = c(60,40,90,10,55,45,88,12))
mydata2$mygrp2 <- paste0(mydata2$mygroup,"_",mydata2$mygroup3)

ggplot(mydata2, aes(mygrp2, value, fill = mysubgroup)) + 
  geom_bar(position = "dodge", width = 0.5, stat = "identity")+ 
  coord_flip() + 
  scale_x_discrete(labels = make_labels2)