diff --git a/DESCRIPTION b/DESCRIPTION
index 235dd3e..ce71c51 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -71,6 +71,6 @@ Collate:
'stamp.R'
'themes.R'
'utils_ggplot2.R'
-RoxygenNote: 7.2.3
+RoxygenNote: 7.3.1
Roxygen: list(markdown = TRUE)
Encoding: UTF-8
diff --git a/NAMESPACE b/NAMESPACE
index 64c65c5..86ed2f0 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -46,6 +46,7 @@ export(gtable_squash_cols)
export(gtable_squash_rows)
export(insert_xaxis_grob)
export(insert_yaxis_grob)
+export(is_zeroGrob)
export(panel_border)
export(pdf_null_device)
export(plot_component_names)
diff --git a/R/get_legend.R b/R/get_legend.R
index 580a179..4992a78 100644
--- a/R/get_legend.R
+++ b/R/get_legend.R
@@ -20,6 +20,6 @@
#' plot_grid(NULL, legend, ncol=1),
#' rel_widths=c(1, 0.2)))
#' @export
-get_legend <- function(plot) {
- get_plot_component(plot, "guide-box")
+get_legend <- function(plot, return_all = FALSE) {
+ get_plot_component(plot, "guide-box", return_all = return_all)
}
diff --git a/R/get_plot_component.R b/R/get_plot_component.R
index 78530dd..d5b4d85 100644
--- a/R/get_plot_component.R
+++ b/R/get_plot_component.R
@@ -1,3 +1,15 @@
+#' is zero grob
+#'
+#' Function to check if a grob is a zero grob
+#'
+#' @param x A grob
+#' @return A logical value
+#' @export
+is_zeroGrob <- function(x) {
+ "zeroGrob" %in% attr(x, "class")
+}
+
+
#' Get plot components
#'
#' Extract plot components from a ggplot or gtable. `get_plot_component()`
@@ -18,6 +30,9 @@
#' p <- ggplot(mpg, aes(displ, cty)) + geom_point()
#' ggdraw(get_plot_component(p, "ylab-l"))
#'
+#' plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + geom_point(size=2.5) + theme(legend.position='bottom')
+#' ggdraw(get_plot_component(plot.mpg, "guide-box"))
+#'
#' @export
get_plot_component <- function(plot, pattern, return_all = FALSE) {
plot <- as_gtable(plot)
@@ -30,8 +45,16 @@ get_plot_component <- function(plot, pattern, return_all = FALSE) {
if (length(grobIndex) > 1 && !return_all) {
# If there's more than one grob, return just the first one
warning("Multiple components found; returning the first one. To return all, use `return_all = TRUE`.")
- grobIndex <- grobIndex[1]
- matched_grobs <- grobs[[grobIndex]]
+ #grobIndex <- grobIndex[1]
+ matched_grobs1 <- grobs[grobIndex]
+ # Remove zero grobs
+ matched_grobs_non_zero <- matched_grobs1[!sapply(matched_grobs1, is_zeroGrob)]
+ # now get the first grob
+ if(length(matched_grobs_non_zero) == 0) {
+ matched_grobs <- NULL
+ } else {
+ matched_grobs <- matched_grobs_non_zero[[1]]
+ }
} else if (length(grobIndex) > 1 && return_all) {
# If there's more than one grob, return all as a list
matched_grobs <- grobs[grobIndex]
diff --git a/man/get_legend.Rd b/man/get_legend.Rd
index 4248371..f3c7a51 100644
--- a/man/get_legend.Rd
+++ b/man/get_legend.Rd
@@ -4,7 +4,7 @@
\alias{get_legend}
\title{Retrieve the legend of a plot}
\usage{
-get_legend(plot)
+get_legend(plot, return_all = FALSE)
}
\arguments{
\item{plot}{A ggplot or gtable from which to retrieve the legend}
diff --git a/man/get_plot_component.Rd b/man/get_plot_component.Rd
index 3c33ce9..99402e1 100644
--- a/man/get_plot_component.Rd
+++ b/man/get_plot_component.Rd
@@ -36,4 +36,7 @@ library(ggplot2)
p <- ggplot(mpg, aes(displ, cty)) + geom_point()
ggdraw(get_plot_component(p, "ylab-l"))
+plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + geom_point(size=2.5) + theme(legend.position='bottom')
+ggdraw(get_plot_component(plot.mpg, "guide-box"))
+
}
diff --git a/man/is_zeroGrob.Rd b/man/is_zeroGrob.Rd
new file mode 100644
index 0000000..275e385
--- /dev/null
+++ b/man/is_zeroGrob.Rd
@@ -0,0 +1,17 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/get_plot_component.R
+\name{is_zeroGrob}
+\alias{is_zeroGrob}
+\title{is zero grob}
+\usage{
+is_zeroGrob(x)
+}
+\arguments{
+\item{x}{A grob}
+}
+\value{
+A logical value
+}
+\description{
+Function to check if a grob is a zero grob
+}
diff --git a/tests/testthat/_snaps/draw_/bottom-right-half-width-height.svg b/tests/testthat/_snaps/draw_/bottom-right-half-width-height.svg
new file mode 100644
index 0000000..1c2afc6
--- /dev/null
+++ b/tests/testthat/_snaps/draw_/bottom-right-half-width-height.svg
@@ -0,0 +1,56 @@
+
+
diff --git a/tests/testthat/_snaps/draw_/centered-full-width-height.svg b/tests/testthat/_snaps/draw_/centered-full-width-height.svg
new file mode 100644
index 0000000..5199b80
--- /dev/null
+++ b/tests/testthat/_snaps/draw_/centered-full-width-height.svg
@@ -0,0 +1,56 @@
+
+
diff --git a/tests/testthat/_snaps/draw_/centered-half-width-height.svg b/tests/testthat/_snaps/draw_/centered-half-width-height.svg
new file mode 100644
index 0000000..e32ad3c
--- /dev/null
+++ b/tests/testthat/_snaps/draw_/centered-half-width-height.svg
@@ -0,0 +1,56 @@
+
+
diff --git a/tests/testthat/_snaps/draw_/four-corners-aligned-scaled.svg b/tests/testthat/_snaps/draw_/four-corners-aligned-scaled.svg
new file mode 100644
index 0000000..53fdd64
--- /dev/null
+++ b/tests/testthat/_snaps/draw_/four-corners-aligned-scaled.svg
@@ -0,0 +1,59 @@
+
+
diff --git a/tests/testthat/_snaps/draw_/four-corners-centered-scaled.svg b/tests/testthat/_snaps/draw_/four-corners-centered-scaled.svg
new file mode 100644
index 0000000..7be2f67
--- /dev/null
+++ b/tests/testthat/_snaps/draw_/four-corners-centered-scaled.svg
@@ -0,0 +1,59 @@
+
+
diff --git a/tests/testthat/_snaps/draw_/label-color-specified-w-uk-spelling.svg b/tests/testthat/_snaps/draw_/label-color-specified-w-uk-spelling.svg
new file mode 100644
index 0000000..29a15ce
--- /dev/null
+++ b/tests/testthat/_snaps/draw_/label-color-specified-w-uk-spelling.svg
@@ -0,0 +1,24 @@
+
+
diff --git a/tests/testthat/_snaps/draw_/label-color-specified-w-us-spelling.svg b/tests/testthat/_snaps/draw_/label-color-specified-w-us-spelling.svg
new file mode 100644
index 0000000..7c66ff2
--- /dev/null
+++ b/tests/testthat/_snaps/draw_/label-color-specified-w-us-spelling.svg
@@ -0,0 +1,24 @@
+
+
diff --git a/tests/testthat/_snaps/draw_/label-color-taken-from-theme.svg b/tests/testthat/_snaps/draw_/label-color-taken-from-theme.svg
new file mode 100644
index 0000000..ae8dc77
--- /dev/null
+++ b/tests/testthat/_snaps/draw_/label-color-taken-from-theme.svg
@@ -0,0 +1,24 @@
+
+
diff --git a/tests/testthat/_snaps/draw_/top-left-half-width-height.svg b/tests/testthat/_snaps/draw_/top-left-half-width-height.svg
new file mode 100644
index 0000000..582ef22
--- /dev/null
+++ b/tests/testthat/_snaps/draw_/top-left-half-width-height.svg
@@ -0,0 +1,56 @@
+
+
diff --git a/tests/testthat/_snaps/key_glyph/circle-key-glyph-color-used-as-fill.svg b/tests/testthat/_snaps/key_glyph/circle-key-glyph-color-used-as-fill.svg
new file mode 100644
index 0000000..10b4646
--- /dev/null
+++ b/tests/testthat/_snaps/key_glyph/circle-key-glyph-color-used-as-fill.svg
@@ -0,0 +1,47 @@
+
+
diff --git a/tests/testthat/_snaps/key_glyph/rectangle-key-glyph-color-used-as-fill.svg b/tests/testthat/_snaps/key_glyph/rectangle-key-glyph-color-used-as-fill.svg
new file mode 100644
index 0000000..b073f34
--- /dev/null
+++ b/tests/testthat/_snaps/key_glyph/rectangle-key-glyph-color-used-as-fill.svg
@@ -0,0 +1,47 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/aligning-faceted-plots-w-unequal-widths.svg b/tests/testthat/_snaps/plot_grid/aligning-faceted-plots-w-unequal-widths.svg
new file mode 100644
index 0000000..e4b9684
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/aligning-faceted-plots-w-unequal-widths.svg
@@ -0,0 +1,367 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/basic-plot-arranging-labeling.svg b/tests/testthat/_snaps/plot_grid/basic-plot-arranging-labeling.svg
new file mode 100644
index 0000000..530dbb9
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/basic-plot-arranging-labeling.svg
@@ -0,0 +1,87 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/basic-plot-arranging-with-missing-plot.svg b/tests/testthat/_snaps/plot_grid/basic-plot-arranging-with-missing-plot.svg
new file mode 100644
index 0000000..dfe708c
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/basic-plot-arranging-with-missing-plot.svg
@@ -0,0 +1,83 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/colwise-arranging.svg b/tests/testthat/_snaps/plot_grid/colwise-arranging.svg
new file mode 100644
index 0000000..cb709ad
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/colwise-arranging.svg
@@ -0,0 +1,83 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/h-v-alignment-right-and-top-axes.svg b/tests/testthat/_snaps/plot_grid/h-v-alignment-right-and-top-axes.svg
new file mode 100644
index 0000000..653dff1
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/h-v-alignment-right-and-top-axes.svg
@@ -0,0 +1,237 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/horizontal-alignment-bottom-axis.svg b/tests/testthat/_snaps/plot_grid/horizontal-alignment-bottom-axis.svg
new file mode 100644
index 0000000..fac9bdb
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/horizontal-alignment-bottom-axis.svg
@@ -0,0 +1,237 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/horizontal-alignment-top-axis.svg b/tests/testthat/_snaps/plot_grid/horizontal-alignment-top-axis.svg
new file mode 100644
index 0000000..6dc53da
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/horizontal-alignment-top-axis.svg
@@ -0,0 +1,237 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/horizontal-alignment.svg b/tests/testthat/_snaps/plot_grid/horizontal-alignment.svg
new file mode 100644
index 0000000..0083015
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/horizontal-alignment.svg
@@ -0,0 +1,129 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/horizontal-vertical-alignment.svg b/tests/testthat/_snaps/plot_grid/horizontal-vertical-alignment.svg
new file mode 100644
index 0000000..4462530
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/horizontal-vertical-alignment.svg
@@ -0,0 +1,182 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/scaling-plots.svg b/tests/testthat/_snaps/plot_grid/scaling-plots.svg
new file mode 100644
index 0000000..5f62af1
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/scaling-plots.svg
@@ -0,0 +1,86 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/setting-heights-1-1-2.svg b/tests/testthat/_snaps/plot_grid/setting-heights-1-1-2.svg
new file mode 100644
index 0000000..9624694
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/setting-heights-1-1-2.svg
@@ -0,0 +1,83 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/setting-widths-1-1-2.svg b/tests/testthat/_snaps/plot_grid/setting-widths-1-1-2.svg
new file mode 100644
index 0000000..edca96c
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/setting-widths-1-1-2.svg
@@ -0,0 +1,83 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/vertical-alignment-left-axis.svg b/tests/testthat/_snaps/plot_grid/vertical-alignment-left-axis.svg
new file mode 100644
index 0000000..3cb5fc1
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/vertical-alignment-left-axis.svg
@@ -0,0 +1,237 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/vertical-alignment-right-axis.svg b/tests/testthat/_snaps/plot_grid/vertical-alignment-right-axis.svg
new file mode 100644
index 0000000..c9e4141
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/vertical-alignment-right-axis.svg
@@ -0,0 +1,237 @@
+
+
diff --git a/tests/testthat/_snaps/plot_grid/vertical-alignment.svg b/tests/testthat/_snaps/plot_grid/vertical-alignment.svg
new file mode 100644
index 0000000..fc7846d
--- /dev/null
+++ b/tests/testthat/_snaps/plot_grid/vertical-alignment.svg
@@ -0,0 +1,129 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-half-open-huge.svg b/tests/testthat/_snaps/themes/theme-half-open-huge.svg
new file mode 100644
index 0000000..8267148
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-half-open-huge.svg
@@ -0,0 +1,103 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-half-open-tiny.svg b/tests/testthat/_snaps/themes/theme-half-open-tiny.svg
new file mode 100644
index 0000000..8ac5679
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-half-open-tiny.svg
@@ -0,0 +1,103 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-half-open.svg b/tests/testthat/_snaps/themes/theme-half-open.svg
new file mode 100644
index 0000000..f30cb95
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-half-open.svg
@@ -0,0 +1,103 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-minimal-grid-huge.svg b/tests/testthat/_snaps/themes/theme-minimal-grid-huge.svg
new file mode 100644
index 0000000..7ec1479
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-minimal-grid-huge.svg
@@ -0,0 +1,108 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-minimal-grid-tiny.svg b/tests/testthat/_snaps/themes/theme-minimal-grid-tiny.svg
new file mode 100644
index 0000000..b04a5ba
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-minimal-grid-tiny.svg
@@ -0,0 +1,108 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-minimal-grid.svg b/tests/testthat/_snaps/themes/theme-minimal-grid.svg
new file mode 100644
index 0000000..f4aabdc
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-minimal-grid.svg
@@ -0,0 +1,108 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-minimal-hgrid-huge.svg b/tests/testthat/_snaps/themes/theme-minimal-hgrid-huge.svg
new file mode 100644
index 0000000..fe94374
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-minimal-hgrid-huge.svg
@@ -0,0 +1,106 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-minimal-hgrid-tiny.svg b/tests/testthat/_snaps/themes/theme-minimal-hgrid-tiny.svg
new file mode 100644
index 0000000..fe6ca09
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-minimal-hgrid-tiny.svg
@@ -0,0 +1,106 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-minimal-hgrid.svg b/tests/testthat/_snaps/themes/theme-minimal-hgrid.svg
new file mode 100644
index 0000000..760d618
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-minimal-hgrid.svg
@@ -0,0 +1,106 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-minimal-vgrid-huge.svg b/tests/testthat/_snaps/themes/theme-minimal-vgrid-huge.svg
new file mode 100644
index 0000000..a4fabd3
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-minimal-vgrid-huge.svg
@@ -0,0 +1,105 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-minimal-vgrid-tiny.svg b/tests/testthat/_snaps/themes/theme-minimal-vgrid-tiny.svg
new file mode 100644
index 0000000..8426766
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-minimal-vgrid-tiny.svg
@@ -0,0 +1,105 @@
+
+
diff --git a/tests/testthat/_snaps/themes/theme-minimal-vgrid.svg b/tests/testthat/_snaps/themes/theme-minimal-vgrid.svg
new file mode 100644
index 0000000..a40d7db
--- /dev/null
+++ b/tests/testthat/_snaps/themes/theme-minimal-vgrid.svg
@@ -0,0 +1,105 @@
+
+
diff --git a/tests/testthat/test_get_legend.R b/tests/testthat/test_get_legend.R
index 1a9582b..133660c 100644
--- a/tests/testthat/test_get_legend.R
+++ b/tests/testthat/test_get_legend.R
@@ -10,14 +10,7 @@ test_that("get legend", {
expect_equal(l$name, "guide-box")
# return null legend if no legend
- # Note by Teun: It is yet unclear to me what the desired behaviour of
- # `get_legend()` is in the face of multiple legends.
- # For now, this test is conditional on ggplot2 version, but this is
- # more of a duct tape solution than a reflection of the intended behaviour
- if (utils::packageVersion("ggplot2") >= "3.5.0") {
- expect_s3_class(get_legend(p + theme(legend.position = "none")), "zeroGrob")
- } else {
- expect_null(get_legend(p + theme(legend.position = "none")))
- }
+ expect_null(get_legend(p + theme(legend.position = "none")))
+
})