The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Multi-panel figure

We are going to use the palmerpenguins dataset to create a multi-panel figure, containing:

SVG template

First, we need to create an SVG template in Inkscape.

This is what our template looks like:

The four rectangles have labels panel_A, panel_B, panel_C, and panel_D, while the caption text box is labelled fig_caption.

Load data and create plots

library(palmerpenguins)
#> 
#> Attachement du package : 'palmerpenguins'
#> Les objets suivants sont masqués depuis 'package:datasets':
#> 
#>     penguins, penguins_raw
library(ggplot2)
data("penguins")

# Number of penguins per species/island
penguins_count <- ggplot(penguins, aes(x = island, fill = species)) +
  geom_bar(alpha = 0.8) +
  scale_fill_manual(values = c("darkorange", "purple", "cyan4"), 
                    guide = "none") +
  theme_minimal() +
  facet_wrap(~species, ncol = 1) +
  coord_flip()

# Flipper length distribution by species
flipper_length <- ggplot(data = penguins, aes(x = flipper_length_mm)) +
  geom_histogram(aes(fill = species), alpha = 0.5, position = "identity") +
  scale_fill_manual(values = c("darkorange", "darkorchid", "cyan4"))

# Body mass vs flipper length colored by species
body_mass_vs_flipper_length <- ggplot(
  data = penguins,
  aes(x = flipper_length_mm, y = body_mass_g)
) +
  geom_point(aes(color = species,
                 shape = species),
             size = 2) +
  scale_color_manual(values = c("darkorange", "darkorchid", "cyan4"))

Use svgedit to insert elements into the SVG template

library(svgedit)

svgedit::draw(
  input_svg = "../inst/examples/Template.svg",
  output_svg = "../inst/examples/penguins_figure.svg",
  plots = list(
    panel_A = penguins_count,
    panel_B = body_mass_vs_flipper_length,
    panel_C = flipper_length
  ),
  text = list(
    fig_caption = c(
      "1",
      "Number of penguins of each species per island",
      "Body mass vs flipper length colored by species",
      "Flipper length distribution by species",
      "Photo of an Adelie Penguin (Diego Tirira, CC BY-SA 2.0)"
    )
  ),
  images = list(
    panel_D = "../inst/examples/adelie_penguin.jpeg"
  )
)
#> `stat_bin()` using `bins = 30`. Pick better value `binwidth`.

This will produce the completed figure:

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.