test_that("guide_geo works", {
skip_if_not_installed("divDyn")
gg <- ggplot(coral_div) +
geom_line(aes(x = stage_age, y = n)) +
scale_x_reverse("Age (Ma)", guide = guide_geo()) +
ylab("Coral Genera") +
coord_cartesian(xlim = c(250, 0), ylim = c(0, 1700), expand = FALSE) +
theme_classic()
expect_true(is(ggplot_build(gg)$layout$panel_params[[1]]$guides$guides[[1]],
"GuideGeo"))
# test class inheritance
expect_true(is(ggplot_build(gg)$layout$panel_params[[1]]$guides$guides[[1]],
"GuideAxis"))
expect_true(is.ggplot(gg))
# check using guides()
gg <- ggplot(coral_div) +
geom_line(aes(x = stage_age, y = n)) +
scale_x_reverse("Age (Ma)") +
ylab("Coral Genera") +
coord_cartesian(xlim = c(250, 0), ylim = c(0, 1700), expand = FALSE) +
theme_classic() +
guides(x = guide_geo())
expect_true(is(ggplot_build(gg)$layout$panel_params[[1]]$guides$guides[[1]],
"GuideGeo"))
expect_true(is.ggplot(gg))
# with guide_axis_stack()
gg <- ggplot(coral_div) +
geom_line(aes(x = stage_age, y = n)) +
scale_x_reverse("Age (Ma)",
guide = guide_axis_stack(guide_geo(),
"axis",
spacing = unit(0, "line"))) +
ylab("Coral Genera") +
coord_cartesian(xlim = c(250, 0), ylim = c(0, 1700), expand = FALSE) +
theme_classic()
expect_doppelganger_deeptime("stacked guides", gg)
ggbuild <- ggplot_build(gg)
expect_true(is(ggbuild$layout$panel_params[[1]]$guides$guides[[1]],
"GuideAxisStack"))
expect_true(
is(ggbuild$layout$panel_params[[1]]$guides$guides[[1]]$params$guides[[1]],
"GuideGeo"))
expect_true(
is(ggbuild$layout$panel_params[[1]]$guides$guides[[1]]$params$guides[[2]],
"GuideAxis"))
# error checking
gg <- ggplot(coral_div) +
geom_line(aes(x = stage_age, y = n)) +
scale_x_reverse("Age (Ma)") +
ylab("Coral Genera") +
coord_cartesian(xlim = c(250, 0), ylim = c(0, 1700), expand = FALSE) +
theme_classic()
expect_error(gg + guides(x = guide_geo(alpha = -2)))
expect_error(gg + guides(x = guide_geo(lab = "yes")))
expect_error(gg + guides(x = guide_geo(rot = "right")))
expect_error(gg + guides(x = guide_geo(alpha = -2)))
expect_error(gg + guides(x = guide_geo(abbrv = "no")))
expect_error(gg + guides(x = guide_geo(family = 3)))
expect_error(gg + guides(x = guide_geo(fontface = 4)))
expect_error(gg + guides(x = guide_geo(skip = TRUE)))
expect_error(gg + guides(x = guide_geo(size = "big")))
expect_error(gg + guides(x = guide_geo(lwd = "small")))
expect_error(gg + guides(x = guide_geo(neg = "yes")))
expect_error(gg + guides(x = guide_geo(bord = FALSE)))
expect_error(gg + guides(x = guide_geo(end_labels = "no")))
expect_error(gg + guides(x = guide_geo(dat_is_discrete = "no")))
})
test_that("guides on facetted plot works", {
skip_if_not_installed("divDyn")
gg <- ggplot(coral_div_diet) +
geom_line(aes(x = stage_age, y = n)) +
scale_x_reverse("Age (Ma)") +
ylab("Coral Genera") +
coord_cartesian(xlim = c(250, 0), expand = FALSE) +
theme_classic() +
guides(x = guide_axis_stack(guide_geo(),
"axis",
spacing = unit(0, "line"))) +
facet_wrap(~diet)
expect_doppelganger_deeptime("guide with facets", gg)
})
test_that("auto-discrete guide works", {
skip_if_not_installed("divDyn")
gg <- ggplot(coral_div_dis) +
geom_col(aes(x = period, y = n, fill = diet)) +
scale_x_discrete("Period", limits = unique(coral_div_dis$period),
labels = NULL, expand = expansion(add = .5)) +
scale_y_continuous(expand = c(0, 0)) +
scale_fill_viridis_d() +
ylab("Coral Genera") +
theme_classic() +
theme(axis.ticks.length.x = unit(0, "lines")) +
guides(x = guide_geo(skip = NULL, abbrv = FALSE))
expect_doppelganger_deeptime("guide on discrete axis", gg)
})
test_that("custom discrete scale works", {
skip_if_not_installed("divDyn")
eras_custom <- data.frame(name = c("Mesozoic", "Cenozoic"),
max_age = c(0.5, 3.5), min_age = c(3.5, 6.5),
color = c("#67C5CA", "#F2F91D"))
gg <- ggplot(coral_div_dis) +
geom_col(aes(x = period, y = n, fill = diet)) +
scale_x_discrete(NULL, limits = unique(coral_div_dis$period),
labels = NULL, expand = expansion(add = .5)) +
scale_y_continuous(expand = c(0, 0)) +
scale_fill_viridis_d() +
ylab("Coral Genera") +
theme_classic() +
theme(axis.ticks.length.x = unit(0, "lines")) +
guides(x = guide_axis_stack(guide_geo(skip = NULL, abbrv = FALSE),
guide_geo(eras_custom, abbrv = FALSE,
dat_is_discrete = TRUE),
spacing = unit(0, "line")))
expect_doppelganger_deeptime("custom discrete guide", gg)
})
test_that("geom_fit_text() works", {
skip_if_not_installed("divDyn")
gg <- ggplot(coral_div) +
geom_line(aes(x = stage_age, y = n)) +
scale_x_reverse("Age (Ma)") +
ylab("Coral Genera") +
coord_cartesian(xlim = c(250, 0), ylim = c(0, 1700), expand = FALSE) +
theme_classic() +
guides(x = guide_axis_stack(guide_geo(abbrv = FALSE, size = "auto",
fittext_args = list(size = 20)),
"axis", spacing = unit(0, "line")))
expect_doppelganger_deeptime("guide with geom_fit_text()", gg)
expect_error({
gg <- ggplot(coral_div) +
geom_line(aes(x = stage_age, y = n)) +
scale_x_reverse("Age (Ma)") +
ylab("Coral Genera") +
coord_cartesian(xlim = c(250, 0), ylim = c(0, 1700), expand = FALSE) +
theme_classic() +
guides(x = guide_geo(fittext_args = 20))
})
})
test_that("ggtree guide works", {
skip_if_not_installed("ggtree")
skip_if_not_installed("phytools")
gg <- revts(ggtree(mammal.tree)) +
coord_cartesian(xlim = c(-75, 0), ylim = c(-2, Ntip(mammal.tree)),
expand = FALSE) +
scale_x_continuous(breaks = seq(-80, 0, 20),
labels = abs(seq(-80, 0, 20))) +
theme_tree2() +
guides(x = guide_axis_stack(guide_geo(neg = TRUE, abbrv = FALSE),
"axis", spacing = unit(0, "line")))
expect_doppelganger_deeptime("guide on ggtree", gg)
})
test_that("ggtree scale works with only fossil taxa", {
skip_if_not_installed("ggtree")
skip_if_not_installed("paleotree")
gg <- ggtree(ceratopsianTreeRaia,
position = position_nudge(x = -ceratopsianTreeRaia$root.time)) +
coord_cartesian(xlim = c(-163.5, -50),
ylim = c(-2, Ntip(ceratopsianTreeRaia)),
expand = FALSE) +
scale_x_continuous(breaks = -rev(epochs$max_age),
labels = rev(epochs$max_age)) +
theme_tree2() +
theme(plot.margin = margin(7, 11, 7, 11)) +
guides(x = guide_axis_stack(
guide_geo("epochs", neg = TRUE, abbrv = FALSE, size = 4,
skip = c("Paleocene", "Middle Jurassic")),
guide_geo(neg = TRUE, abbrv = FALSE, size = 5),
"axis", spacing = unit(0, "line")))
expect_doppelganger_deeptime("guides on fossil ggtree", gg)
})
test_that("guide_geo works with coord_geo_radial", {
skip_if_not_installed("ape")
gg <- revts(ggtree(tree)) +
coord_geo_radial(dat = "epochs", end = 1.49 * pi,
fill = c("grey80", "grey90")) +
scale_y_continuous(guide = "none", breaks = NULL,
expand = expansion(c(0.05, 0.1))) +
scale_x_continuous(expand = expansion()) +
theme_classic() +
guides(r = guide_axis_stack(
guide_geo(neg = TRUE, abbrv = FALSE, size = "auto", rot = -90,
height = unit(.75, "line"), skip = NULL),
"axis", spacing = unit(0, "line")))
expect_doppelganger_deeptime("guide with coord_geo_radial", gg)
})
test_that("ggtree scale works with only fossil taxa", {
skip_if_not_installed("paleotree")
gg <- ggtree(ceratopsianTreeRaia,
position = position_nudge(x = -ceratopsianTreeRaia$root.time)) +
coord_geo_radial(dat = "stages", fill = c("grey80", "grey95"),
end = 1.49 * pi) +
guides(
r = guide_axis_stack(guide_geo(abbrv = FALSE, size = "auto", rot = -90,
neg = TRUE, height = unit(.75, "line")),
"axis", spacing = unit(0, "npc"))
) +
scale_y_continuous(guide = "none", breaks = NULL) +
theme_classic()
expect_doppelganger_deeptime("guide on fossil coord_geo_radial", gg)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.