When you add a plot or image to a multi-panel figure, you can specify which panels it should cover. The fill_panel function will automatically choose the next free location for you if you don't specify it.

Here is a multi-panel figure with twelve panels.

library(multipanelfigure)
library(grid)
cols <- 4
rows <- 3
figure <- multi_panel_figure(
  width = 135,
  columns = cols,
  height = 100,
  rows = rows)
## Warning in check_units(width, unit): Multiple grid::units detected. Casting all
## to 'unit' argument ('mm').
## Warning in check_units(height, unit): Multiple grid::units detected. Casting all
## to 'unit' argument ('mm').

We will fill the panels with colored rectangle. The next function is designed to change the color of the rectangle each time it is called. Don't worry too much about its implementation.

rect_grob <- function()
{
  this_env <- environment(rect_grob)
  assign("current", this_env$current + 1, this_env)
  rectGrob(gp = gpar(fill = rainbow(8)[this_env$current], alpha = 0.5))
}
assign("current", 0, environment(rect_grob))

If we don't specify which panel to fill, fill_panel defaults to using the top-left panel.

(figure %<>% fill_panel(rect_grob()))
## Setting row to 1
## Setting column to 1

plot of chunk panel1_1

Next, the automatically chosen position is the second column on the top row. In general, the default position moves left to right, then top to bottom – just as you would read in most Roman, Greek, or Cyrillic scripts.

(figure %<>% fill_panel(rect_grob()))
## Setting row to 1
## Setting column to 2

plot of chunk panel1_2

If you want to cover multiple panels, or specify a different position, you can manually set the row and column arguments. In the following example, row is set so that the rectangle covers rows one to three. The column argument specifies that the third column should be used; as it is of length one, the image only covers a single column.

(figure %<>% fill_panel(rect_grob(), row = 1:3, column = 3))

plot of chunk panel1.3_3

Now that the third column in the top row has been filled, the automatic positioning fills the fourth column in the top row.

(figure %<>% fill_panel(rect_grob()))
## Setting row to 1
## Setting column to 4

plot of chunk panel1_4

The top row is now completely full, so automatic positioning fills the first value in the second row.

(figure %<>% fill_panel(rect_grob()))
## Setting row to 2
## Setting column to 1

plot of chunk panel2_1

Automatic positioning works independently for the row and the column. Here we use automatic positioning for the row but specify the fourth column using left_panel.

(figure %<>% fill_panel(rect_grob(), column = 4))
## Setting row to 2

plot of chunk panel2_4

Likewise, we can specify the third row, but use automatic positioning for the column.

(figure %<>% fill_panel(rect_grob(), row = 3))
## Setting column to 1

plot of chunk panel3_1

If we want to overwrite a panel, by default an error will be thrown. In this case, the panel in the second and third rows, third column have already been filled.

(figure %<>% fill_panel(rect_grob(), column = 2:3, row = 3))
## Error in fill_panel(., rect_grob(), column = 2:3, row = 3): Attempt to use these already filled panels.
##   row col
## 1   3   3

If we really want to overwrite the panel, we can set allow_panel_overwriting = TRUE. The overwritten panels will still be warned about.

(figure %<>% fill_panel(rect_grob(), column = 2:3, row = 3, allow_panel_overwriting = TRUE))
## Warning in fill_panel(., rect_grob(), column = 2:3, row = 3, allow_panel_overwriting = TRUE): Attempt to use these already filled panels.
##   row col
## 1   3   3

plot of chunk allow_panel_overwriting