Special thanks to the patchwork
project—many core codes
of the plot composer process were adapted from patchwork
.
We have added new features to better implement ggalign
’s
layout functions (ggheatmap()
and ggstack()
),
including:
free_align()
free_border()
free_guide()
free_lab()
free_space()
free_vp()
These features have not been pushed to patchwork
because
they required significant modification of core code. We attempted to
merge them, but the author of patchwork
decided to
implement some of these features independently. The latest version of
patchwork now includes free_align()
,
free_lab()
, and free_space()
functionality
under a single function: patchwork::free()
. For more
details, see: https://www.tidyverse.org/blog/2024/09/patchwork-1-3-0/.
The plot composer function in ggalign
is
align_plots()
, which behaves similarly to
cowplot::align_plots()
and
patchwork::wrap_plots()
.
By default, align_plots()
won’t collect any guide
legends. You can use the guides
argument to control which
side of the guide legends should be collected. They will be collected to
their original side. Here, we use patch_titles()
to
indicate the guide legend position (instead of using
ggtitle()
). patch_titles()
can add titles on
four sides, and the title will be placed between the plot panel and the
guide legend.
p_right <- ggplot(mtcars) +
geom_point(aes(hp, wt, colour = mpg)) +
patch_titles("right") +
labs(color = "right")
p_top <- p_right +
patch_titles("top") +
scale_color_continuous(
name = "top",
guide = guide_colorbar(position = "top")
)
p_left <- p_right +
patch_titles("left") +
scale_color_continuous(
name = "left",
guide = guide_colorbar(position = "left")
)
p_bottom <- p_right +
patch_titles("bottom") +
scale_color_continuous(
name = "bottom",
guide = guide_colorbar(position = "bottom")
)
align_plots(p_right, p_bottom, p_top, p_left, guides = "tlbr")
If align_plots()
is nested in another
align_plots()
, the nested align_plots()
will
inherit the guides
argument from the upper-level
align_plots()
. And the top-level align_plots()
won’t collect guide legends from plots within the nested
align_plots()
unless the nested align_plots()
collects them first.
The free_guide()
function allows you to override the
guides
argument for a single plot.
align_plots(
free_guide(p_right, NULL),
free_guide(p_bottom, NULL),
free_guide(p_top, NULL),
free_guide(p_left, NULL),
guides = "tlbr"
)
You can also specify which guide positions to be collected for individual plots.
sessionInfo()
#> R version 4.4.0 (2024-04-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04 LTS
#>
#> Matrix products: default
#> BLAS/LAPACK: /usr/lib/x86_64-linux-gnu/libmkl_rt.so; LAPACK version 3.8.0
#>
#> locale:
#> [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
#> [4] LC_COLLATE=C LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
#> [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
#> [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C
#>
#> time zone: Asia/Shanghai
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] ggalign_0.0.4 ggplot2_3.5.1
#>
#> loaded via a namespace (and not attached):
#> [1] sass_0.4.9 utf8_1.2.4 generics_0.1.3 digest_0.6.36
#> [5] magrittr_2.0.3 evaluate_0.24.0 grid_4.4.0 RColorBrewer_1.1-3
#> [9] bookdown_0.39 iterators_1.0.14 fastmap_1.2.0 foreach_1.5.2
#> [13] jsonlite_1.8.8 ggrastr_1.0.2 seriation_1.5.6 fansi_1.0.6
#> [17] viridisLite_0.4.2 scales_1.3.0 codetools_0.2-20 textshaping_0.4.0
#> [21] jquerylib_0.1.4 cli_3.6.3 registry_0.5-1 rlang_1.1.4
#> [25] munsell_0.5.1 withr_3.0.0 cachem_1.1.0 yaml_2.3.8
#> [29] ggbeeswarm_0.7.2 tools_4.4.0 dplyr_1.1.4 colorspace_2.1-0
#> [33] vctrs_0.6.5 TSP_1.2-4 ca_0.71.1 R6_2.5.1
#> [37] lifecycle_1.0.4 vipor_0.4.7 ragg_1.3.2 pkgconfig_2.0.3
#> [41] beeswarm_0.4.0 pillar_1.9.0 bslib_0.7.0 gtable_0.3.5
#> [45] data.table_1.15.4 glue_1.7.0 systemfonts_1.1.0 xfun_0.45
#> [49] tibble_3.2.1 tidyselect_1.2.1 highr_0.11 knitr_1.47
#> [53] farver_2.1.2 htmltools_0.5.8.1 rmarkdown_2.27 labeling_0.4.3
#> [57] compiler_4.4.0