This package extends ggplot2 by providing advanced tools for aligning and organizing multiple plots, particularly those that automatically reorder observations, such as dendrogram. It offers fine control over layout adjustment and plot annotations, enabling you to create complex, publication-quality visualizations while still using the familiar grammar of ggplot2.
ggalign
?ggalign
focuses on aligning observations across multiple
plots. It leverages the "number of observations"
in the vctrs package
or NROW()
function to maintain consistency in plot
organization.
If you’ve ever struggled with aligning plots with self-contained
ordering (like dendrogram), or applying consistent grouping or ordering
across multiple plots (e.g., with k-means clustering),
ggalign
is designed to make this easier. The package
integrates seamlessly with ggplot2, providing the flexibility to use its
geoms, scales, and other components for complex visualizations.
You can install ggalign
from CRAN
using:
install.packages("ggalign")
Alternatively, install the development version from GitHub with:
# install.packages("remotes")
::install_github("Yunuuuu/ggalign") remotes
The usage of ggalign
is simple if you’re familiar with
ggplot2
syntax, the typical workflow includes:
ggheatmap()
or
ggstack()
.align_group()
: Group layout axis into panel with a
group variable.align_kmeans()
: Group layout axis into panel by
kmeans.align_order()
: Reorder layout observations based on
statistical weights or by manually specifying the observation
index.align_dendro()
: Reorder or Group layout based on
hierarchical clustering.ggalign()
or ggpanel()
,
and then layer additional ggplot2 elements such as geoms, stats, or
scales.Below, we’ll walk through a basic example of using
ggalign
to create a heatmap with a
dendrogram
.
library(ggalign)
set.seed(123)
<- matrix(rnorm(81), nrow = 9)
small_mat rownames(small_mat) <- paste0("row", seq_len(nrow(small_mat)))
colnames(small_mat) <- paste0("column", seq_len(ncol(small_mat)))
# initialize the heatmap layout, we can regard it as a normal ggplot object
ggheatmap(small_mat) +
# we can directly modify geoms, scales and other ggplot2 components
scale_fill_viridis_c() +
# add annotation in the top
hmanno("top") +
# in the top annotation, we add a dendrogram, and split observations into 3 groups
align_dendro(aes(color = branch), k = 3) +
# in the dendrogram we add a point geom
geom_point(aes(color = branch, y = y)) +
# change color mapping for the dendrogram
scale_color_brewer(palette = "Dark2")
ggalign
offers advantages over extensions like ggheatmap by
providing full compatibility with ggplot2
. With
ggalign
, you can:
geoms
, stats
,
scales
et al. into your layouts.ggplot2
ecosystem.ggplot2
plots by panel
area.Fewer Built-In Annotations: May require additional coding for specific annotations or customization compared to the extensive built-in annotation function in ComplexHeatmap.
Here are some more advanced visualizations using
ggalign
: