Using facet tags and strip labels together in ggplot2

后端 未结 4 509
再見小時候
再見小時候 2021-01-02 22:21

I\'d like to create a figure using ggplot2\'s facet_grid, like below:

# Load ggplot2 librar         


        
相关标签:
4条回答
  • 2021-01-02 22:54

    Of course, I find a solution immediately after asking. The problem appears to be that tag_facet sets strip labels to element_blank, which can be fixed by calling theme after calling 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)
    

    Created on 2019-05-09 by the reprex package (v0.2.1)

    0 讨论(0)
  • 2021-01-02 22:55

    You can view the code for tag_facet here. As you can see, the function explicitly and deliberately removes the facet strips (see also the "value" in the documentation). You can fix that by creating your own function, and just removing the theme call from the original code:

    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)
    }
    

    0 讨论(0)
  • 2021-01-02 23:07

    This can be done using only 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)
    

    0 讨论(0)
  • 2021-01-02 23:08

    With {tagger} package, this can be made a little simpler. You can install tagger by using devtools::install_github("eliocamp/tagger"). After installing tagger, let's load it.

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

    0 讨论(0)
提交回复
热议问题