Author: Guangchuang Yu School of Basic Medical Sciences, Southern Medical University
Date: 2025-07-15

# Useful functions for ggplot2

#### Guangchuang Yu
School of Basic Medical Sciences, Southern Medical University

#### 2025-07-15

    library("grid")
    library("ggplot2")
    library("ggfun")

## element_roundrect

The `element_roundrect` works like `element_rect` to draw round rectangle background. We can use it to adjust theme elements, including legend, strip, panel and plot background.

    p <- ggplot(mpg, aes(displ, cty)) + geom_point()
    p <- p + facet_grid(cols = vars(cyl))
    p <- p + theme(strip.background=element_roundrect(fill="grey40", color=NA, r=0.15))
    p

    p2 <- ggplot(mtcars, aes(mpg, disp, color=factor(cyl), size=cyl)) +
             geom_point()
    p2 + theme(legend.background=element_roundrect(color="#808080", linetype=2))

## gglegend

    p <- ggplot(mtcars, aes(mpg, disp)) + geom_point()
    data <- data.frame(colour = c("red",  "blue"), VALUE = c("A", "B"))
    gglegend(aes(colour = VALUE, label=VALUE), data, geom_text, p)

## set_font

    d <- data.frame(x=rnorm(10), y=rnorm(10), lab=LETTERS[1:10])
    p <- ggplot(d, aes(x, y)) + geom_text(aes(label=lab), size=5)
    set_font(p, family="Times", fontface="italic", color='firebrick')

    ## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
    ## font family not found in Windows font database
    ## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
    ## font family not found in Windows font database
    ## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
    ## font family not found in Windows font database
    ## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
    ## font family not found in Windows font database

## facet_set

Manually specifying facet labels.

    library(ggplot2)
    library(ggfun)
    p <- ggplot(mtcars, aes(disp, drat)) +
      geom_point() +
      facet_grid(cols=vars(am), rows=vars(cyl))
    p + facet_set(label=c(`0`="Zero", `6`="Six"))

Supports labeller:

    p + facet_set(label=label_both)

Add a facet label to a plot.

    p + facet_set(label="TEST")

With the ggplotify package, we can use `facet_set` to add a facet label to almost any plot in R.

    ## please try:

    ggplotify::as.ggplot(~barplot(1:10, col=rainbow(10))) +
      facet_set('a barplot in base')