Takes a ggplot and modifies its facet drawing behaviour such that the widths and heights of panels are set by the user.
force_panelsizes(
rows = NULL,
cols = NULL,
respect = NULL,
total_width = NULL,
total_height = NULL
)
A forcedsize
S3 object that can be added to a plot.
a numeric
or unit
vector for setting panel heights
(rows) or panel widths (cols).
a logical
value. If TRUE
, widths and heights
specified in "null" unit
s are proportional. If FALSE
,
"null" unit
s in x- and y-direction vary independently.
an absolute unit
of length 1 setting the
total width or height of all panels and the decoration between panels.
If not NULL
, rows
and cols
should be numeric
and not unit
s.
Forcing the panel sizes should in theory work regardless of what
facetting choice was made, as long as this function is called after the
facet specification. Even when no facets are specified, ggplot2 defaults to
the ggplot2::facet_null()
specification; a single panel.
force_panelsizes
works by wrapping the original panel drawing
function inside a function that modifies the widths and heights of panel
grobs in the original function's output gtable.
When rows
or cols
are numeric
vectors, panel sizes are
defined as ratios i.e. relative "null" unit
s. rows
and
cols
vectors are repeated or shortened to fit the number of panels
in their direction. When rows
or cols
are NULL
, no
changes are made in that direction.
When respect = NULL
, default behaviour specified elsewhere is
inherited.
No attempt is made to guarantee that the plot fits the output device. The
space
argument in ggplot2::facet_grid()
will be
overruled. When individual panels span multiple rows or columns, this
function may not work as intended.
ggplot(mtcars, aes(disp, mpg)) +
geom_point() +
facet_grid(vs ~ am) +
force_panelsizes(rows = c(2, 1),
cols = c(2, 1))
Run the code above in your browser using DataLab