context("Financial Times plots")
gg_pkgs <- c(
"ggplot2",
"dplyr",
"tidyr",
"forcats",
"ggmosaic",
"waffle",
"ggthemes",
"ggbeeswarm",
"ggridges"
)
gg_pkgs_check <- sapply(gg_pkgs, requireNamespace, quietly = TRUE)
skip_if(any(!gg_pkgs_check), "Unable to check FT plots as some packages are missing.")
iris$Test.Cat.Var <- sample(letters[1:3], size = nrow(iris), replace = TRUE)
iris$Test.Cat.Var2 <- sample(LETTERS[1:3], size = nrow(iris), replace = TRUE)
test_that("Barcode plots work", {
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_barcode")
expect_match(attr(p1, "code"), 'ggplot2::geom_point\\(shape = "\\|"\\)')
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_barcode")
expect_match(attr(p1, "code"), 'ggplot2::geom_point\\(shape = "\\|"\\)')
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_barcode", gg_barSize = 12)
expect_equal(p1$layers[[1]]$aes_params$size, 12)
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_barcode2")
expect_equal(p1$labels$y, "")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_barcode3")
expect_match(attr(p1, "code"), "ggplot2::geom_spoke")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_barcode3", gg_width = 2, gg_height = 1.5)
expect_equal(p1$layers[[1]]$aes_params$linewidth, 2)
expect_equal(p1$layers[[1]]$aes_params$radius, 1.5)
})
test_that("Boxplots work", {
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_boxplot")
expect_match(attr(p1, "code"), "ggplot2::geom_boxplot()")
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_boxplot")
expect_match(attr(p1, "code"), "ggplot2::geom_boxplot()")
expect_match(attr(p1, "code"), "fill = Species")
})
test_that("Violin plots work", {
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_violin", fill_colour = "red", alpha = 0.2)
expect_match(attr(p1, "code"), "ggplot2::geom_violin()")
expect_equal(p1$layers[[1]]$aes_params$fill, "red")
expect_equal(p1$layers[[1]]$aes_params$alpha, 0.2)
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_violin")
expect_match(attr(p1, "code"), "ggplot2::geom_violin()")
expect_match(attr(p1, "code"), "fill = Species")
## Flipping x and y variables works
p1 <- iNZightPlot(Species, Sepal.Length, data = iris, plottype = "gg_violin")
expect_match(attr(p1, "code"), "ggplot2::geom_violin()")
})
test_that("Dotstrip plots work", {
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_dotstrip")
expect_match(attr(p1, "code"), "ggplot2::geom_point()")
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_dotstrip")
expect_match(attr(p1, "code"), "ggplot2::geom_point()")
expect_match(attr(p1, "code"), "colour = Species")
})
test_that("Beeswarm plots work", {
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_beeswarm")
expect_match(attr(p1, "code"), "ggbeeswarm::geom_beeswarm()")
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_beeswarm")
expect_match(attr(p1, "code"), "ggbeeswarm::geom_beeswarm()")
expect_match(attr(p1, "code"), "colour = Species")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_quasirandom")
expect_match(attr(p1, "code"), "ggbeeswarm::geom_quasirandom()")
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_quasirandom")
expect_match(attr(p1, "code"), "ggbeeswarm::geom_quasirandom()")
expect_match(attr(p1, "code"), "colour = Species")
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_quasirandom", gg_swarmwidth = 0.2)
expect_equal(p1$layers[[1]]$position$width, 0.2)
})
test_that("Density plots work", {
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_density", alpha = 0.2, fill_colour = "red")
expect_match(attr(p1, "code"), "ggplot2::geom_density()")
expect_equal(p1$layers[[1]]$aes_params$alpha, 0.2)
expect_equal(p1$layers[[1]]$aes_params$fill, "red")
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_density", alpha_densitygroup = 0.2)
expect_match(attr(p1, "code"), "ggplot2::geom_density()")
expect_match(attr(p1, "code"), "fill = Species")
expect_equal(p1$layers[[1]]$aes_params$alpha, 0.2)
})
test_that("Ridgeline plots work", {
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_ridgeline")
expect_match(attr(p1, "code"), "ggridges::geom_density_ridges()")
expect_match(attr(p1, "code"), "fill = Species")
})
test_that("Cumulative curve plots work", {
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_cumcurve")
expect_match(attr(p1, "code")[2], "ggplot2::geom_step")
p1 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_cumcurve")
expect_match(attr(p1, "code")[2], "ggplot2::geom_step")
expect_match(attr(p1, "code")[2], "colour = Species")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_cumcurve", fill_colour = "blue")
expect_equal(p1$layers[[1]]$aes_params$colour, "blue")
})
test_that("Lollipop count plots work", {
p1 <- iNZightPlot(Species, data = iris, plottype = "gg_lollipop2", fill_colour = "red")
expect_match(attr(p1, "code")[2], "ggplot2::geom_point")
expect_match(attr(p1, "code")[2], "ggplot2::geom_segment")
p1 <- iNZightPlot(Species, Test.Cat.Var, data = iris, plottype = "gg_lollipop2")
expect_match(attr(p1, "code")[2], "ggplot2::geom_point")
expect_match(attr(p1, "code")[2], "ggplot2::geom_linerange")
expect_match(attr(p1, "code")[2], "colour = Test.Cat.Var")
p1 <- iNZightPlot(Test.Cat.Var, data = iris, plottype = "gg_lollipop2", ordered = "asc")
expect_match(attr(p1, "code")[2], "ggplot2::geom_point")
expect_match(attr(p1, "code")[2], "ggplot2::geom_segment")
expect_match(attr(p1, "code")[1], "forcats::fct_reorder")
p1 <- iNZightPlot(Test.Cat.Var, Species, data = iris, plottype = "gg_lollipop2", ordered = "asc")
expect_match(attr(p1, "code")[2], "ggplot2::geom_point")
expect_match(attr(p1, "code")[2], "ggplot2::geom_linerange")
expect_match(attr(p1, "code")[2], "colour = Species")
expect_match(attr(p1, "code")[1], "forcats::fct_reorder")
})
test_that("Pie plots work", {
p1 <- iNZightPlot(Test.Cat.Var, data = iris, plottype = "gg_pie")
expect_match(attr(p1, "code"), "ggplot2::geom_bar")
expect_match(attr(p1, "code"), "ggplot2::coord_polar")
p1 <- iNZightPlot(Species, data = iris, plottype = "gg_pie", ordered = "desc")
expect_match(attr(p1, "code")[2], "ggplot2::geom_bar")
expect_match(attr(p1, "code")[1], "forcats::fct_infreq\\(Species\\)")
p1 <- iNZightPlot(Species, data = iris, plottype = "gg_pie", ordered = "asc")
expect_match(attr(p1, "code")[2], "ggplot2::geom_bar")
expect_match(attr(p1, "code")[1], "forcats::fct_infreq\\(Species\\)")
expect_match(attr(p1, "code")[1], "forcats::fct_rev")
})
test_that("Donut plots work", {
p1 <- iNZightPlot(Species, data = iris, plottype = "gg_donut")
expect_match(attr(p1, "code")[2], "ggplot2::geom_rect")
p1 <- iNZightPlot(Species, data = iris, plottype = "gg_donut", ordered = "desc")
expect_match(attr(p1, "code")[2], "ggplot2::geom_rect")
expect_match(attr(p1, "code")[1], "forcats::fct_infreq\\(Species\\)")
p1 <- iNZightPlot(Species, data = iris, plottype = "gg_donut", ordered = "asc")
expect_match(attr(p1, "code")[2], "ggplot2::geom_rect")
expect_match(attr(p1, "code")[1], "forcats::fct_infreq\\(Species\\)")
expect_match(attr(p1, "code")[1], "forcats::fct_rev")
})
test_that("Grid plots work", {
p1 <- iNZightPlot(Species, data = iris, plottype = "gg_gridplot")
expect_match(attr(p1, "code")[2], "waffle::waffle")
})
test_that("Lollipop distribution plots work", {
iris2 <- iris
iris2$id <- as.character(1:nrow(iris2))
p1 <- iNZightPlot(Sepal.Length, data = iris2, plottype = "gg_lollipop")
expect_match(attr(p1, "code")[2], "ggplot2::geom_point")
expect_match(attr(p1, "code")[2], "ggplot2::geom_segment")
is.na(iris2$Sepal.Length) <- rep(c(TRUE, FALSE), times = c(5, nrow(iris2) - 5))
suppressWarnings(
p1 <- iNZightPlot(Sepal.Length, data = iris2, plottype = "gg_lollipop")
)
expect_equal(p1$labels$subtitle, "5 Missing Observations Removed")
expect_match(attr(p1, "code")[2], "ggplot2::geom_point")
expect_match(attr(p1, "code")[2], "ggplot2::geom_segment")
})
test_that("Column distribution plots work", {
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_column2")
expect_match(attr(p1, "code")[2], "ggplot2::geom_col")
})
test_that("Facetting works", {
p1 <- iNZightPlot(Sepal.Length, g1 = Species, data = iris, plottype = "gg_violin")
expect_equal(names(p1$facet$params$facets), "Species")
p1 <- iNZightPlot(Sepal.Length, g1 = Species, g1.level = "setosa", data = iris, plottype = "gg_violin")
expect_match(attr(p1, "code")[1], 'Species == \\"setosa\\"')
p1 <- iNZightPlot(Sepal.Length, g1 = Species, g2 = Test.Cat.Var, data = iris, plottype = "gg_violin")
expect_equal(names(p1$facet$params$facets), "Species")
p1 <- iNZightPlot(Sepal.Length, g1 = Species, g2 = Test.Cat.Var, g2.level = "_MULTI", data = iris, plottype = "gg_violin")
expect_match(attr(p1, "code")[1], "ggplot2::facet_grid")
expect_equal(names(p1$facet$params$cols), "Species")
expect_equal(names(p1$facet$params$rows), "Test.Cat.Var")
p1 <- iNZightPlot(Sepal.Length, g1 = Species, g1.level = "setosa", g2 = Test.Cat.Var, g2.level = "_MULTI", data = iris, plottype = "gg_violin")
expect_match(attr(p1, "code")[2], "ggplot2::facet_grid")
expect_equal(names(p1$facet$params$cols), "Species")
expect_equal(names(p1$facet$params$rows), "Test.Cat.Var")
expect_match(attr(p1, "code")[1], 'Species == \\"setosa\\"')
})
test_that("Facetting works for plots with data step", {
p1 <- iNZightPlot(Test.Cat.Var2, g1 = Species, data = iris, plottype = "gg_lollipop2")
expect_equal(names(p1$facet$params$facets), "Species")
p1 <- iNZightPlot(Test.Cat.Var2, g1 = Species, g1.level = "setosa", data = iris, plottype = "gg_lollipop2")
expect_match(attr(p1, "code")[1], 'Species == \\"setosa\\"')
p1 <- iNZightPlot(Test.Cat.Var2, g1 = Species, g2 = Test.Cat.Var, g2.level = "_MULTI", data = iris, plottype = "gg_lollipop2")
expect_match(attr(p1, "code")[2], "ggplot2::facet_grid")
expect_equal(names(p1$facet$params$cols), "Species")
expect_equal(names(p1$facet$params$rows), "Test.Cat.Var")
p1 <- iNZightPlot(Test.Cat.Var2, g1 = Species, g1.level = "setosa", g2 = Test.Cat.Var, g2.level = "_MULTI", data = iris, plottype = "gg_lollipop2")
expect_match(attr(p1, "code")[2], "ggplot2::facet_grid")
expect_equal(names(p1$facet$params$cols), "Species")
expect_equal(names(p1$facet$params$rows), "Test.Cat.Var")
expect_match(attr(p1, "code")[1], 'Species == \\"setosa\\"')
})
test_that("Data names can be replaced", {
test_expr <- rlang::expr(
ggplot2::ggplot(iris, ggplot2::aes(Species)) +
ggplot2::geom_bar()
)
test_expr2 <- replace_data_name(test_expr, "test_name")
expect_equal(as.character(test_expr2[[2]][[2]]), "test_name")
})
test_that("Other expressions can be inserted into expression", {
test_expr <- rlang::expr(
plot_data <- other_data %>%
dplyr::group_by(var1, var2) %>%
dplyr::summarise(count = sum(count))
)
insert_into_first_place(test_expr, rlang::expr(dplyr::mutate(new_var = var1 + var2)))
})
test_that("Other expressions can be inserted into expression", {
test_expr <- rlang::expr(
plot_data <- other_data %>%
dplyr::group_by(var1, var2) %>%
dplyr::ungroup() %>%
dplyr::summarise(count = sum(count))
)
test_expr2 <- add_to_group(test_expr[[3]], rlang::sym("facet_var"))
expect_equal(as.character(test_expr2[[2]][[2]][[3]]), c("dplyr::group_by", "var1", "var2", "facet_var"))
expect_equal(as.character(test_expr2[[2]][[3]]), c("dplyr::group_by", "facet_var"))
})
test_that("Inversing x/y doesn't affect graph", {
p1 <- iNZightPlot(Species, Sepal.Length, data = iris, plottype = "gg_violin")
p2 <- iNZightPlot(Sepal.Length, Species, data = iris, plottype = "gg_violin")
expect_equal(attr(p1, "code"), attr(p2, "code"))
})
test_that("Y-axis label for one-way numeric is blank", {
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_barcode")
expect_equal(p1$labels$y, "")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_barcode2")
expect_equal(p1$labels$y, "")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_barcode3")
expect_equal(p1$labels$y, "")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_boxplot")
expect_equal(p1$labels$x, "")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_violin")
expect_equal(p1$labels$x, "")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_dotstrip")
expect_equal(p1$labels$y, "")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_beeswarm")
expect_equal(p1$labels$x, "")
p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_quasirandom")
expect_equal(p1$labels$x, "")
})
test_that("Plots can be rotated", {
p1 <- iNZightPlot(Sepal.Length,
data = iris, plottype = "gg_violin",
rotation = FALSE
)
expect_match(attr(p1, "code"), "coord_flip")
p1 <- iNZightPlot(Sepal.Length,
data = iris, plottype = "gg_violin",
rotation = TRUE
)
expect_false(grepl("coord_flip", attr(p1, "code")))
p1 <- iNZightPlot(Species,
data = iris, plottype = "gg_gridplot",
rotation = TRUE
)
expect_match(attr(p1, "code")[2], "flip = TRUE")
# p1 <- iNZightPlot(Sepal.Length, data = iris, plottype = "gg_violin",
# rotation = TRUE, rotate_labels = list(x = TRUE))
# expect_match(attr(p1, "code"), "coord_flip")
})
test_that("Plots can have themes", {
p1 <- iNZightPlot(Sepal.Length,
data = iris, plottype = "gg_violin",
gg_theme = "bw"
)
expect_match(attr(p1, "code"), "theme_bw")
p1 <- iNZightPlot(Sepal.Length,
data = iris, plottype = "gg_violin",
gg_theme = "tufte"
)
expect_match(attr(p1, "code"), "theme_tufte")
})
test_that("General plot formatting works", {
p1 <- iNZightPlot(Sepal.Length,
data = iris, plottype = "gg_violin",
rotate_labels = list(x = TRUE, y = TRUE)
)
expect_equal(p1$theme$axis.text.x$angle, 45)
expect_equal(p1$theme$axis.text.y$angle, 45)
p1 <- iNZightPlot(Sepal.Length,
data = iris, plottype = "gg_violin",
bg = "black"
)
expect_equal(p1$theme$panel.background$fill, "black")
p1 <- iNZightPlot(Sepal.Length, Species,
data = iris, plottype = "gg_violin",
caption = "Test caption"
)
expect_equal(p1$labels$caption, "Test caption")
p1 <- iNZightPlot(Sepal.Length, Species,
data = iris, plottype = "gg_violin",
cex = 2
)
expect_equal(p1$theme$text$size, 22)
})
test_that("Each type of palette works", {
## General ggplot palettes
p1 <- iNZightPlot(Sepal.Length, Species,
data = iris, plottype = "gg_violin",
palette = "Reds"
)
expect_match(attr(p1, "code"), 'scale_fill_brewer\\(palette = \\"Reds\\"\\)')
p1 <- iNZightPlot(Sepal.Length, Species,
data = iris, plottype = "gg_cumcurve",
palette = "Reds"
)
expect_match(attr(p1, "code")[2], 'scale_colour_brewer\\(palette = \\"Reds\\"\\)')
iris$Test.Cat.Var <- sample(letters[1:3], size = nrow(iris), replace = TRUE)
p1 <- iNZightPlot(Species, Test.Cat.Var,
data = iris, plottype = "gg_heatmap",
palette = "Reds"
)
expect_match(attr(p1, "code")[2], 'scale_fill_distiller\\(palette = \\"Reds\\"\\)')
## Viridis palettes
p1 <- iNZightPlot(Sepal.Length, Species,
data = iris, plottype = "gg_violin",
palette = "inferno"
)
expect_match(attr(p1, "code"), 'scale_fill_viridis_d\\(option = \\"inferno\\"\\)')
p1 <- iNZightPlot(Sepal.Length, Species,
data = iris, plottype = "gg_cumcurve",
palette = "inferno"
)
expect_match(attr(p1, "code")[2], 'scale_colour_viridis_d\\(option = \\"inferno\\"\\)')
p1 <- iNZightPlot(Species, Test.Cat.Var,
data = iris, plottype = "gg_heatmap",
palette = "inferno"
)
expect_match(attr(p1, "code")[2], 'scale_fill_viridis_c\\(option = \\"inferno\\"\\)')
## Greyscale palette
p1 <- iNZightPlot(Sepal.Length, Species,
data = iris, plottype = "gg_violin",
palette = "greyscale"
)
expect_match(attr(p1, "code"), "scale_fill_grey")
p1 <- iNZightPlot(Sepal.Length, Species,
data = iris, plottype = "gg_cumcurve",
palette = "greyscale"
)
expect_match(attr(p1, "code")[2], "scale_colour_grey")
p1 <- iNZightPlot(Species, Test.Cat.Var,
data = iris, plottype = "gg_heatmap",
palette = "greyscale"
)
expect_match(attr(p1, "code")[2], "scale_fill_gradient")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.