【问题标题】:How to use italics for facet labels in ggplot2?如何在ggplot2中使用斜体作为构面标签?
【发布时间】:2023-03-18 20:38:01
【问题描述】:

我正在尝试在 ggplot2 中使用斜体来表示构面名称。我首先订购和重命名方面。我遇到了potential solution,但这需要labeller=label_parsed,我正在使用labeller=name_labeller 重命名我的构面。

在以下示例中,我希望分面名称“一”“二”“三”“四”和“五”为斜体。这是一个示例数据框:

structure(list(Names = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 
5L, 6L, 6L, 7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L), Other = c(5L, 
3L, 2L, 6L, 5L, 4L, 5L, 4L, 5L, 3L, 2L, 6L, 5L, 4L, 5L, 4L, 4L, 
5L, 3L, 2L), X = c(0L, 10L, 0L, 10L, 0L, 10L, 0L, 10L, 0L, 10L, 
0L, 10L, 0L, 10L, 0L, 10L, 0L, 10L, 0L, 10L), Y = c(0L, 10L, 
0L, 10L, 0L, 10L, 0L, 10L, 0L, 10L, 0L, 10L, 0L, 10L, 0L, 10L, 
0L, 10L, 0L, 10L)), .Names = c("Names", "Other", "X", "Y"), class = "data.frame", row.names = c(NA, 
-20L))

生成情节的代码是

library(ggplot2)
library(grid)
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)



facets <- c("1", "2", "3", "4", "5")

names <- list(
  '1'="one",
  '2'="two",
  '3'="three",
  '4'="four",
  '5'="five"
)

name_labeller <- function(variable,value){
  return(names[value])
}

ggplot(FacetTestData[FacetTestData$Names %in% facets,], aes(y = Y, x = X, group = Names)) + 
  geom_point(shape = 21, size=3) + 
  scale_fill_manual(values=c("gray90","gray40")) + 
  geom_smooth(method="lm", se= FALSE, size = 1) +
  scale_color_manual(values=c("black","black")) +
  geom_smooth(method = 'lm', size = 1, colour = 'red', se = FALSE)  +
  facet_grid(Names ~ ., labeller=name_labeller)

以下代码似乎将斜体属性赋予列表names

levels(names) <- c("italic('one')", "italic('two')", "italic('three')", "italic('four')",    "italic('five')")

但我不太清楚如何使用facet_grid() 进行这项工作。有谁知道我该怎么做?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    按照这些思路应该可以工作:

    ... + theme(strip.text = element_text(face = "italic"))
    

    有关theme() 的更多详细信息,请参阅the docs

    【讨论】:

    • 有没有办法将斜体添加到一个方面而不是所有方面?
    • theme() 适用于所有方面。我能想到一个使用 {tikzDevice} 的复杂解决方案。
    【解决方案2】:

    您可以使用来自 krlmlr 的代码和修改来分离轴图形

    ... + theme(strip.text = ...   
    

    ... + theme(strip.text.x = ...    
    

    ... + theme(strip.text.y = ...
    

    【讨论】: