wilkelab / cowplot

cowplot: Streamlined Plot Theme and Plot Annotations for ggplot2
https://wilkelab.org/cowplot/
701 stars 84 forks source link

Adds functionality to align plots by axis values #192

Open DavZim opened 1 year ago

DavZim commented 1 year ago

This PR adds functionality that allows the user to align plots by axis values, effectively closing #173.

Note that this is using the code by Z.lin as proposed here on SO.

Both align_plots and plot_grid gain a new flag align_axis = FALSE. If set to TRUE, the graphs are aligned by their axis values as well.

First a quick showcase:

library(ggplot2)

p1 <- ggplot(mtcars, aes(x = disp, y = mpg)) + geom_point()

# Vertical Align (by X axis)
p2 <- ggplot(mtcars[mtcars$disp > 300, ], aes(x = disp, y = mpg)) + geom_point()
plot_grid(p1, p2, ncol = 1, align = "v",  align_axis = TRUE)

image

# Horizontal Align (by Y axis)
p3 <- ggplot(mtcars[mtcars$mpg > 20, ], aes(x = disp, y = mpg)) + geom_point()
plot_grid(p1, p3, nrow = 1, align = "h",  align_axis = TRUE)

image

There are some tests added as well, but especially the tests for align_plots() are very crude/early as I don't have enough experience with the internals of units and there are some minor differences in some elements of the units. So far I captured the printed output, which is identical. We probably want to update that.

Let me know if there are tests missing and if so which ones. Also feel free to add to this.