Nothing
# Tests for scatterHex
# library(dittoViz); library(testthat); source("tests/testthat/setup.R"); for (i in list.files("R", pattern="^utils", full.names = TRUE)) source(i); source("tests/testthat/test-hex.R")
df$number <- as.numeric(seq_len(nrow(df)))
cont1 <- "bill_length_mm"
cont2 <- "number"
disc <- "species"
disc2 <- "island"
rows.names <- rownames(df)[1:40]
rows.logical <- c(rep(TRUE, 40), rep(FALSE,nrow(df)-40))
test_that("scatterHex can plot density only, and continuous or discrete color.by data", {
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2), "ggplot")
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc), "ggplot")
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2), "ggplot")
})
test_that("scatterHex - bins adjusts number of bins", {
### Manual check: Large bins
expect_s3_class(scatterHex(df, x.by=cont1, y.by=cont2, bins = 5), "ggplot")
})
test_that("scatterHex - color.method options work for discrete data, and defaults to 'max'", {
### Manual: Should have continuous color-scale and max.props in its title
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
color.method = "max.prop"),
"ggplot")
### Manual: Next 2 should be the same plot with discrete color legend and "max" in its title
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
color.method = "max"),
"ggplot")
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc),
"ggplot")
expect_error(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
color.method = "abcde"),
"'color.method' not valid", fixed = TRUE)
})
test_that("scatterHex - color.method options work for continuous data, and defaults to 'median'", {
### Manual: First should have lower max color than second
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
color.method = "max"),
"ggplot")
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
color.method = "sum"),
"ggplot")
### Manual: Next 2 should be the same plot
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
color.method = "median"),
"ggplot")
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2),
"ggplot")
expect_error(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
color.method = "abcde"),
"'color.method' not valid", fixed = TRUE)
})
test_that("scatterHex can be subset to show only certain obs with any rows.use method", {
expect_s3_class((c1 <- scatterHex(data_frame=df, x.by=cont1, y.by=cont2, data.out = TRUE,
rows.use = rows.names))$plot,
"ggplot")
expect_s3_class((c2 <- scatterHex(data_frame=df, x.by=cont1, y.by=cont2, data.out = TRUE,
rows.use = rows.logical))$plot,
"ggplot")
expect_s3_class((c3 <- scatterHex(data_frame=df, x.by=cont1, y.by=cont2, data.out = TRUE,
rows.use = 1:40))$plot,
"ggplot")
expect_equal(c1$data,c2$data)
expect_equal(c1$data,c3$data)
expect_equal(nrow(c3$data), 40)
# And if we remove an entire grouping...
expect_s3_class(scatterHex(disc, data_frame=df, x.by=cont1, y.by=cont2,
rows.use = df[[disc]]!=0),
"ggplot")
})
test_that("scatterHex colors can be adjusted for discrete data", {
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
color.panel = cols), "ggplot")
### Manual check: These two should look the same.
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
color.panel = cols[5:1]), "ggplot")
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
color.panel = cols,
colors = 5:1), "ggplot")
})
test_that("scatterHex color legend: groupings can be renamed", {
### Manual check: color groups should be 1:5 (instead of A:E)
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
rename.color.groups = 1:3), "ggplot")
})
test_that("scatterHex color scales can be adjusted for continuous color data", {
### Manual check: Legend range adjusted and black to orange
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
min = -5, max = 150, min.color = "black", max.color = "orange"),
"ggplot")
### Manual check: Legend has breaks at all 50s in 50 to 300
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
legend.color.breaks = seq(50,300,50)),
"ggplot")
### Manual check: Plot looks similar to above except from "WOW", 2:5, to "HEY"
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
legend.color.breaks = seq(50,300,50),
legend.color.breaks.labels = c("WOW",2:5,"HEY!")),
"ggplot")
})
test_that("scatterHex color scales can be adjusted for density (color)", {
### Manual check: Legend range adjusted and black to orange
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2,
min.density = -2, max.density = 2, min.color = "black", max.color = "orange"),
"ggplot")
### Manual check: Legend from 1:3
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2,
legend.density.breaks = seq(1:3)),
"ggplot")
### Manual check: Plot looks similar to above except from "WOW", 2, to "HEY"
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2,
legend.density.breaks = seq(1:3),
legend.density.breaks.labels = c("WOW",2,"HEY!")),
"ggplot")
})
test_that("scatterHex color scales can be adjusted for density (opacity)", {
### Manual check: Opacity legend range adjusted -2 to 2 & barely any different
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
min.density = -2, max.density = 2, min.opacity = 0.5, max.opacity = 0.6),
"ggplot")
### Manual check: Opacity legend breaks only at 1 and 3
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
legend.density.breaks = c(1,3)),
"ggplot")
### Manual check: Opaacity legend from "WOW", 2, to "HEY"
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
legend.density.breaks = seq(1:3),
legend.density.breaks.labels = c("WOW",2,"HEY!")),
"ggplot")
})
test_that("scatterHex titles and theme can be adjusted", {
### Manual check: All titles should be adjusted.
expect_s3_class(
scatterHex(
cont2, data_frame=df, x.by=cont1, y.by=cont2,
main = "Gotta catch", sub = "em all",
xlab = "Pokemon", ylab = "Pokedex #s",
legend.color.title = "groups",
legend.density.title = "Encounters"),
"ggplot")
### Manual check: density legend (color) = Encounters
expect_s3_class(
scatterHex(
data_frame=df, x.by=cont1, y.by=cont2,
legend.density.title = "Encounters"),
"ggplot")
### Manual check: top and right plot outline removed
expect_s3_class(scatterHex(cont2, data_frame=df, x.by=cont1, y.by=cont2,
theme = theme_classic()),
"ggplot")
### Manual Check: Legend removed
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2,
legend.show = FALSE),
"ggplot")
})
test_that("scatterHex can be faceted with split.by (1 or 2 vars)", {
# MANUAL CHECK: FACETING
expect_s3_class(
scatterHex(
disc, data_frame=df, x.by=cont1, y.by=cont2,
split.by = disc2),
"ggplot")
# MANUAL CHECK: horizontal faceting
expect_s3_class(
scatterHex(
disc, data_frame=df, x.by=cont1, y.by=cont2,
split.by = disc2,
split.nrow = 1),
"ggplot")
# MANUAL CHECK: vertical faceting
expect_s3_class(
scatterHex(
disc, data_frame=df, x.by=cont1, y.by=cont2,
split.by = disc2,
split.ncol = 1),
"ggplot")
# MANUAL CHECK: Grid with rows=age, cols=groups
expect_s3_class(
scatterHex(
disc, data_frame=df, x.by=cont1, y.by=cont2,
split.by = c(disc2,disc)),
"ggplot")
expect_s3_class(
scatterHex(
disc, data_frame=df, x.by=cont1, y.by=cont2,
split.by = c(disc2,disc),
rows.use = rows.logical),
"ggplot")
})
test_that("scatterHex allows plotting of multiple vars, via faceting", {
expect_s3_class(
scatterHex(
data_frame=df, x.by=cont1, y.by=cont2, c(cont1, cont2)),
"ggplot")
# Works with rows.use
expect_s3_class(
scatterHex(
data_frame=df, x.by=cont1, y.by=cont2, c(cont1, cont2),
rows.use = rows.logical),
"ggplot")
# These should have transposed facet grids
expect_s3_class(
print(scatterHex(
data_frame=df, x.by=cont1, y.by=cont2, c(cont1, cont2),
split.by = disc2)),
"ggplot")
expect_s3_class(
print(scatterHex(
data_frame=df, x.by=cont1, y.by=cont2, c(cont1, cont2),
split.by = disc2, multivar.split.dir = "row")),
"ggplot")
expect_error(
scatterHex(
data_frame=df, x.by=cont1, y.by=cont2, c(disc, cont1, cont2)),
"Only numeric", fixed = TRUE)
expect_warning(
scatterHex(
data_frame=df, x.by=cont1, y.by=cont2, c(cont1, cont2),
split.by = c(disc2,disc)),
"will be ignored", fixed = TRUE)
})
##########
# Added Features
##########
test_that("scatterHex trajectory adding works", {
expect_s3_class(
scatterHex(
data_frame=df, x.by=cont1, y.by=cont2, cont2,
add.trajectory.by.groups = list(
c("Adelie","Chinstrap","Gentoo")
),
trajectory.group.by = disc),
"ggplot")
### Manual Check: One large arrow.
expect_s3_class(
scatterHex(
data_frame=df, x.by=cont1, y.by=cont2, cont2,
add.trajectory.by.groups = list(
c("Adelie","Chinstrap","Gentoo")),
trajectory.group.by = disc,
trajectory.arrow.size = 1),
"ggplot")
### Manual Check: Arrows should be detached from points
expect_s3_class(
scatterHex(
disc, data_frame=df, x.by=cont1, y.by=cont2,
add.trajectory.curves = list(
data.frame(
c(-10,0,-20),
c(-20,-10,0)),
data.frame(
c(5:20),
c(5:10,9:5,6:10)
))),
"ggplot")
})
test_that("scatterHex adding contours", {
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
do.contour = TRUE),
"ggplot")
### Manual Check: Contour lines light blue and dashed
expect_s3_class(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
do.contour = TRUE,
contour.color = "lightblue", contour.linetype = "dashed"),
"ggplot")
})
test_that("scatterHex do.label/do.ellipse", {
expect_s3_class(
scatterHex(
disc, data_frame=df, x.by=cont1, y.by=cont2,
do.label = TRUE),
"ggplot")
expect_s3_class(
scatterHex(
disc, data_frame=df, x.by=cont1, y.by=cont2,
do.ellipse = TRUE),
"ggplot")
})
test_that("scatterHex ignores do.label/do.ellipse for continuous data", {
expect_message(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
do.label = TRUE),
"do.label was/were ignored for non-discrete data", fixed = TRUE)
expect_message(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, cont2,
do.ellipse = TRUE),
"do.ellipse was/were ignored for non-discrete data", fixed = TRUE)
# No message for discrete data && MANUAAL CHECK: ellipse is drawn
expect_message(scatterHex(data_frame=df, x.by=cont1, y.by=cont2, disc,
do.ellipse = TRUE),
NA)
})
# adjustments
test_that("scatterPlot data adjustments applied", {
expect_s3_class(
(p <- scatterHex(
cont1, data_frame = df, x.by=cont1, y.by=cont1, data.out = TRUE,
x.adj.fxn=function(x) as.vector(scale(x)),
y.adj.fxn=function(x) {round(as.vector(scale(x)), 0)},
color.adjustment = "z-score"))$plot, "ggplot")
expect_equal(
p$data[[p$cols_used$y.by]],
round(p$data[[p$cols_used$x.by]],0))
expect_equal(
round(mean(p$data[[p$cols_used$x.by]]),0),
0)
expect_equal(
p$data[[p$cols_used$color.by]],
p$data[[p$cols_used$x.by]])
expect_s3_class(
(p <- scatterHex(
cont1, data_frame = df, x.by=cont1, y.by=cont1, data.out = TRUE,
y.adjustment= "relative.to.max"))$plot, "ggplot")
expect_equal(
max(p$data[[p$cols_used$y.by]]), 1)
})
test_that("scatterPlot added arbitrary horizontal and vertical lines work", {
expect_s3_class(
scatterHex(df, "PC1", "PC2", disc,
add.yline = c(-1, 1), add.xline = c(2)),
"ggplot")
### Manual Check:
# Vertical lines dotted and horizontal line red (not black and dashed as above)
expect_s3_class(
scatterHex(df, "PC1", "PC2", disc,
add.yline = c(-1, 1), add.xline = c(2),
yline.color = "red", xline.linetype = "dotted"),
"ggplot")
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.