Использование тегов фасетов и раздевание меток вместе в ggplot2 - PullRequest
4 голосов
/ 09 мая 2019

Я хотел бы создать фигуру, используя ggplot2 facet_grid, как показано ниже:

# Load ggplot2 library for plotting
library(ggplot2)

# Plot dummy data
p <- ggplot(mtcars, aes(mpg, wt)) 
p <- p + geom_point() 
p <- p + facet_grid(gear ~ cyl)
print(p)

Это замечательно, но так как это происходит в журнальной статье, каждая панель также должна быть помечена a, b, c и т. Д. В пакете egg есть отличная функция для этого, называемая tag_facet, которая используется следующим образом:

# Load egg library for tagging
library(egg)
#> Warning: package 'egg' was built under R version 3.5.3
#> Loading required package: gridExtra

# Same plot but with tags for each facet
p <- ggplot(mtcars, aes(mpg, wt)) 
p <- p + geom_point() 
p <- p + facet_grid(gear ~ cyl)
tag_facet(p)

Создано в 2019-05-09 с помощью пакета Представление (v0.2.1)

По мере необходимости я теперь как размечаю буквы на каждой панели. Но, как видите, мои стрип-этикетки исчезли!

Мой вопрос : Как сохранить метки на полосах, добавив теги?

Ответы [ 3 ]

3 голосов
/ 09 мая 2019

Вы можете просмотреть код для tag_facet здесь .Как видите, функция явно и намеренно удаляет фасетные полосы (см. Также «значение» в документации ).Это можно исправить, создав собственную функцию и просто удалив вызов theme из исходного кода:

tag_facet2 <- function(p, open = "(", close = ")", tag_pool = letters, x = -Inf, y = Inf, 
    hjust = -0.5, vjust = 1.5, fontface = 2, family = "", ...) {

    gb <- ggplot_build(p)
    lay <- gb$layout$layout
    tags <- cbind(lay, label = paste0(open, tag_pool[lay$PANEL], close), x = x, y = y)
    p + geom_text(data = tags, aes_string(x = "x", y = "y", label = "label"), ..., hjust = hjust, 
        vjust = vjust, fontface = fontface, family = family, inherit.aes = FALSE)
}

enter image description here

1 голос
/ 09 мая 2019

Это можно сделать, используя только geom_text():

data_text <- data.frame(
  cyl   = c(4, 6, 8, 4, 6, 8, 4, 6, 8),
  gear  = c(3, 3, 3, 4, 4, 4, 5, 5, 5)
  label = c('(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)')
)

ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
facet_grid(gear ~ cyl) +
geom_text(data=data_text, aes(x=12, y=5, label=label), fontface='bold', size=4)

enter image description here

0 голосов
/ 09 мая 2019

Конечно, я нахожу решение сразу после запроса.Кажется, проблема в том, что tag_facet устанавливает метки полосы на element_blank, что можно исправить, вызвав theme после , вызвав tag_facet.

# Load libraries
library(ggplot2)
library(egg)
#> Warning: package 'egg' was built under R version 3.5.3
#> Loading required package: gridExtra

# Create plot
p <- ggplot(mtcars, aes(mpg, wt)) 
p <- p + geom_point() 
p <- p + facet_grid(gear ~ cyl)
p <- tag_facet(p)
p <- p + theme(strip.text = element_text())
print(p)

Создано в 2019-05-09 с помощью пакета Представить (v0.2.1)

...