Skip to contents

align_plots will try to align plot panels, and every elements of the plot, following functions romove these restrictions:

  • free_align: if we want to compose plots without alignment of some panel axes (panel won't be aligned). we can wrap the plot with free_align.

  • free_border: If we want to compose plots without alignment of the panel borders (but still align the panels themselves), we can wrap the plot with free_border.

  • free_lab: If we want to compose plots without alignment of the axis title, we can wrap the plot with free_lab.

  • free_space: Removing the ggplot element sizes when aligning.

  • free_vp: Customize the viewport when aligning.

Usage

free_align(plot, axes = "tlbr")

free_border(plot, borders = "tlbr")

free_lab(plot, labs = "tlbr")

free_space(plot, spaces = "tlbr")

free_vp(plot, x = 0.5, y = 0.5, width = NA, height = NA, ...)

Arguments

plot

A ggplot or alignpatches object.

axes

Which axes shouldn't be aligned? A string containing one or more of "t", "l", "b", and "r".

borders

Which border shouldn't be aligned (free_border)? A string containing one or more of "t", "l", "b", and "r".

labs

Which axis labs to be free? A string containing one or more of "t", "l", "b", and "r".

spaces

Which border spaces should be removed? A string containing one or more of "t", "l", "b", and "r".

x

A numeric vector or unit object specifying x-location.

y

A numeric vector or unit object specifying y-location.

width

A numeric vector or unit object specifying width.

height

A numeric vector or unit object specifying height.

...

Arguments passed on to grid::viewport

default.units

A string indicating the default units to use if x, y, width, or height are only given as numeric vectors.

just

A string or numeric vector specifying the justification of the viewport relative to its (x, y) location. If there are two values, the first value specifies horizontal justification and the second value specifies vertical justification. Possible string values are: "left", "right", "centre", "center", "bottom", and "top". For numeric values, 0 means left alignment and 1 means right alignment.

gp

An object of class "gpar", typically the output from a call to the function gpar. This is basically a list of graphical parameter settings.

clip

One of "on", "inherit", or "off", indicating whether to clip to the extent of this viewport, inherit the clipping region from the parent viewport, or turn clipping off altogether. For back-compatibility, a logical value of TRUE corresponds to "on" and FALSE corresponds to "inherit".

May also be a grob (or a gTree) that describes a clipping path or the result of a call to as.path.

mask

One of "none" (or FALSE) or "inherit" (or TRUE) or a grob (or a gTree) or the result of call to as.mask. This specifies that the viewport should have no mask, or it should inherit the mask of its parent, or it should have its own mask, as described by the grob.

xscale

A numeric vector of length two indicating the minimum and maximum on the x-scale. The limits may not be identical.

yscale

A numeric vector of length two indicating the minimum and maximum on the y-scale. The limits may not be identical.

angle

A numeric value indicating the angle of rotation of the viewport. Positive values indicate the amount of rotation, in degrees, anticlockwise from the positive x-axis.

layout

A Grid layout object which splits the viewport into subregions.

layout.pos.row

A numeric vector giving the rows occupied by this viewport in its parent's layout.

layout.pos.col

A numeric vector giving the columns occupied by this viewport in its parent's layout.

name

A character value to uniquely identify the viewport once it has been pushed onto the viewport tree.

Value

  • free_align: A modified version of plot with a free_align class.

  • free_border: A modified version of plot with a free_border class.

  • free_lab: A modified version of plot with a free_lab class.

  • free_space: A modified version of plot with a free_space class.

  • free_vp: A modified version of plot with a free_vp class.

Examples

# directly copied from `patchwork`
# Sometimes you have a plot that defies good composition alginment, e.g. due
# to long axis labels
p1 <- ggplot(mtcars) +
    geom_bar(aes(y = factor(gear), fill = factor(gear))) +
    scale_y_discrete(
        "",
        labels = c(
            "3 gears are often enough",
            "But, you know, 4 is a nice number",
            "I would def go with 5 gears in a modern car"
        )
    )

# When combined with other plots it ends up looking bad
p2 <- ggplot(mtcars) +
    geom_point(aes(mpg, disp))

align_plots(p1, p2, ncol = 1L)


# We can fix this be using `free_align`
align_plots(free_align(p1), p2, ncol = 1L)


# If we still want the panels to be aligned to the right, we can choose to
# free only the left side
align_plots(free_align(p1, axes = "l"), p2, ncol = 1L)


# We could use `free_lab` to fix the layout in a different way
align_plots(p1, free_lab(p2), ncol = 1L)


# Another issue is that long labels can occupy much spaces
align_plots(NULL, p1, p2, p2)


# This can be fixed with `free_space`
align_plots(NULL, free_space(p1, "l"), p2, p2)