Nothing
skip_on_cran() # This test suite is long-running (on cran) and is skipped
set.seed(111)
dat <- data_frame(x = rep(LETTERS[1:2], 15), y = rnorm(30), g = rep(LETTERS[3:5], 10))
test_that("dodging works", {
p <- ggplot(dat, aes(x = x, y = y, fill = g)) +
geom_dotplot(
binwidth = 0.2,
binaxis = "y",
position = "dodge",
stackdir = "center"
)
df <- layer_data(p)
# Number of levels in the dodged variable
ndodge <- 3
# The amount of space allocated within each dodge group
dwidth <- .9 / ndodge
# This should be the x position for each before dodging
xbase <- ceiling(df$group / ndodge)
# This is the offset from dodging
xoffset <- (df$group - 1) %% ndodge - (ndodge - 1) / 2
xoffset <- xoffset * dwidth
# Check actual x locations equal predicted x locations
expect_true(all(abs(df$x - (xbase + xoffset)) < 1e-6))
# Check that xmin and xmax are in the right place
expect_true(all(abs(df$xmax - df$x - dwidth/2) < 1e-6))
expect_true(all(abs(df$x - df$xmin - dwidth/2) < 1e-6))
})
test_that("binning works", {
bp <- ggplot(dat, aes(y)) +
geom_dotplot(binwidth = .4, method = "histodot")
x <- layer_data(bp)$x
# Need ugly hack to make sure mod function doesn't give values like -3.99999
# due to floating point error
expect_true(all(abs((x - min(x) + 1e-7) %% .4) < 1e-6))
bp <- ggplot(dat, aes(x = y)) +
geom_dotplot(binwidth = .4, method = "dotdensity")
x <- layer_data(bp)$x
# This one doesn't ensure that dotdensity works, but it does check that it's not
# doing fixed bin sizes
expect_false(all(abs((x - min(x) + 1e-7) %% .4) < 1e-6))
})
test_that("NA's result in warning from stat_bindot", {
set.seed(122)
dat <- data_frame(x = rnorm(20))
dat$x[c(2,10)] <- NA
# Need to assign it to a var here so that it doesn't automatically print
expect_snapshot_warning(ggplot_build(ggplot(dat, aes(x)) + geom_dotplot(binwidth = .2)))
})
test_that("when binning on y-axis, limits depend on the panel", {
p <- ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_dotplot(binaxis='y', binwidth = 1/30 * diff(range(mtcars$mpg)))
b1 <- ggplot_build(p + facet_wrap(~am))
b2 <- ggplot_build(p + facet_wrap(~am, scales = "free_y"))
equal_limits1 <- (b1$layout$panel_params[[1]]$y.range == b1$layout$panel_params[[2]]$y.range)
equal_limits2 <- (b2$layout$panel_params[[1]]$y.range == b2$layout$panel_params[[2]]$y.range)
expect_true(all(equal_limits1))
expect_false(all(equal_limits2))
})
test_that("weight aesthetic is checked", {
p <- ggplot(mtcars, aes(x = mpg, weight = gear/3)) +
geom_dotplot(binwidth = 1/30 * diff(range(mtcars$mpg)))
expect_snapshot_warning(ggplot_build(p))
p <- ggplot(mtcars, aes(x = mpg, weight = -gear)) +
geom_dotplot(binwidth = 1/30 * diff(range(mtcars$mpg)))
expect_snapshot_warning(ggplot_build(p))
})
# Visual tests ------------------------------------------------------------
test_that("geom_dotplot draws correctly", {
set.seed(112)
dat <- data_frame(x = rnorm(20), g = rep(LETTERS[1:2], 10))
# Basic dotplot with binning along x axis
expect_doppelganger("basic dotplot with dot-density binning, binwidth = .4",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4)
)
expect_doppelganger("histodot binning (equal bin spacing)",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, method = "histodot")
)
expect_doppelganger("dots stacked closer: stackratio=.5, fill=white",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, stackratio = .5, fill = "white")
)
expect_doppelganger("larger dots: dotsize=1.5, fill=white",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, dotsize = 1.4, fill = "white")
)
# Stacking methods
expect_doppelganger("stack up",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, stackdir = "up")
)
expect_doppelganger("stack down",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, stackdir = "down")
)
expect_doppelganger("stack center",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, stackdir = "center")
)
expect_doppelganger("stack centerwhole",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, stackdir = "centerwhole")
)
# Stacking methods with coord_flip
expect_doppelganger("stack up with coord_flip",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, stackdir = "up") + coord_flip()
)
expect_doppelganger("stack down with coord_flip",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, stackdir = "down") + coord_flip()
)
expect_doppelganger("stack center with coord_flip",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, stackdir = "center") + coord_flip()
)
expect_doppelganger("stack centerwhole with coord_flip",
ggplot(dat, aes(x)) + geom_dotplot(binwidth = .4, stackdir = "centerwhole") + coord_flip()
)
# Binning along x, with groups
expect_doppelganger("multiple groups, bins not aligned",
ggplot(dat, aes(x, fill = g)) + geom_dotplot(binwidth = .4, alpha = .4)
)
expect_doppelganger("multiple groups, bins aligned",
ggplot(dat, aes(x, fill = g)) + geom_dotplot(binwidth = .4, alpha = .4, binpositions = "all")
)
# Binning along y axis
expect_doppelganger("bin along y, stack center",
ggplot(dat, aes(0, x)) + geom_dotplot(binwidth = .4, binaxis = "y", stackdir = "center")
)
expect_doppelganger("bin along y, stack centerwhole",
ggplot(dat, aes(0, x)) + geom_dotplot(binwidth = .4, binaxis = "y", stackdir = "centerwhole")
)
expect_doppelganger("bin along y, stack centerwhole, histodot",
ggplot(dat, aes(0, x)) + geom_dotplot(binwidth = .4, binaxis = "y", stackdir = "centerwhole", method = "histodot")
)
# Binning along y, with multiple grouping factors
dat2 <- data_frame(x = rep(factor(LETTERS[1:3]), 30), y = rnorm(90), g = rep(factor(LETTERS[1:2]), 45))
expect_doppelganger("bin x, three y groups, stack centerwhole",
ggplot(dat2, aes(y, x)) + geom_dotplot(binwidth = .25, binaxis = "x", stackdir = "centerwhole")
)
expect_doppelganger("bin y, three x groups, stack centerwhole",
ggplot(dat2, aes(x, y)) + geom_dotplot(binwidth = .25, binaxis = "y", stackdir = "centerwhole")
)
expect_doppelganger("bin y, three x groups, bins aligned across groups",
ggplot(dat2, aes(x, y)) + geom_dotplot(binwidth = .25, binaxis = "y", stackdir = "center", binpositions = "all")
)
expect_doppelganger("bin y, three x groups, bins aligned, coord_flip",
ggplot(dat2, aes(x, y)) + geom_dotplot(binwidth = .25, binaxis = "y", stackdir = "center", binpositions = "all") +
coord_flip()
)
expect_doppelganger("bin y, dodged",
ggplot(dat2, aes("foo", y, fill = x)) + scale_y_continuous(breaks = seq(-4, 4, .4)) +
geom_dotplot(binwidth = .25, position = "dodge", binaxis = "y", stackdir = "center")
)
expect_doppelganger("bin y, dodged, coord_flip",
ggplot(dat2, aes("foo", y, fill = x)) + scale_y_continuous(breaks = seq(-4, 4, .4)) +
geom_dotplot(binwidth = .25, position = "dodge", binaxis = "y", stackdir = "center") +
coord_flip()
)
expect_doppelganger("bin y, three x groups, fill and dodge",
ggplot(dat2, aes(x, y, fill = g)) + scale_y_continuous(breaks = seq(-4 ,4, .4)) +
geom_dotplot(binwidth = .2, position = "dodge", binaxis = "y", stackdir = "center")
)
expect_doppelganger("bin y, continous x-axis, grouping by x",
ggplot(dat2, aes(as.numeric(x), y, group = x)) + geom_dotplot(binwidth = .2, binaxis = "y", stackdir = "center")
)
expect_doppelganger("bin y, continous x-axis, single x group",
ggplot(dat2, aes(as.numeric(x), y)) + geom_dotplot(binwidth = .2, binaxis = "y", stackdir = "center")
)
# border width and size
expect_doppelganger(
"variable linetype and size specified as aesthetics",
ggplot(
dat,
aes(
x,
linetype = rep(c("a", "b"), length.out = nrow(dat)),
stroke = rep(c(1, 2), length.out = nrow(dat))
)
) +
geom_dotplot(binwidth = .4, fill = "red", col = "blue") +
continuous_scale("stroke", palette = function(x) scales::rescale(x, to = c(1, 6))) +
guides(linetype = guide_legend(order = 1))
)
# Stacking groups
expect_doppelganger("3 stackgroups, dot-density with aligned bins",
ggplot(dat2, aes(y, fill = x)) + geom_dotplot(binwidth = .25, stackgroups = TRUE, binpositions = "all", alpha = 0.5)
)
expect_doppelganger("3 stackgroups, histodot",
ggplot(dat2, aes(y, fill = x)) + geom_dotplot(binwidth = .25, stackgroups = TRUE, method = "histodot", alpha = 0.5)
)
expect_doppelganger("3 stackgroups, bin y, histodot",
ggplot(dat2, aes(1, y, fill = x)) + geom_dotplot(binaxis = "y", binwidth = .25, stackgroups = TRUE, method = "histodot", alpha = 0.5)
)
# This one is currently broken but it would be a really rare case, and it
# probably requires a really ugly hack to fix
expect_doppelganger("bin y, dodging, 3 stackgroups, histodot",
ggplot(dat2, aes(x, y, fill = g)) +
geom_dotplot(binaxis = "y", binwidth = .25, stackgroups = TRUE, method = "histodot",
alpha = 0.5, stackdir = "centerwhole")
)
expect_doppelganger("facets, 3 groups, histodot, stackgroups",
ggplot(dat2, aes(y, fill = g)) + geom_dotplot(binwidth = .25, stackgroups = TRUE, method = "histodot", alpha = 0.5) +
facet_grid(x ~ .)
)
# Missing values
dat2 <- dat
dat2$x[c(1, 10)] <- NA
expect_warning(expect_doppelganger("2 NA values, dot-density binning, binwidth = .4",
ggplot(dat2, aes(x)) + geom_dotplot(binwidth = .4)
))
expect_warning(expect_doppelganger("2 NA values, bin along y, stack center",
ggplot(dat2, aes(0, x)) + geom_dotplot(binwidth = .4, binaxis = "y", stackdir = "center")
))
})
test_that("stackratio != 1 works", {
df <- data.frame(x = c(rep(1, 3), rep(2, 2)))
expect_doppelganger("stackratio = 1.5",
ggplot(df) +
geom_hline(yintercept = 0) +
geom_dotplot(aes(x), binwidth = 0.5, stackdir = "down", stackratio = 1.5, fill = NA) +
geom_dotplot(aes(x + 3), binwidth = 0.5, stackdir = "up", stackratio = 1.5, fill = NA) +
geom_dotplot(aes(x + 6), binwidth = 0.5, stackdir = "center", stackratio = 1.5, fill = NA) +
geom_dotplot(aes(x + 9), binwidth = 0.5, stackdir = "centerwhole", stackratio = 1.5, fill = NA)
)
})
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.