context("coord_polar")
test_that("Polar distance calculation", {
dat <- data.frame(
theta = c(0, 2*pi, 2, 6, 6, 1, 1, 0),
r = c(0, 0, 0.5, 0.5, 1, 1, 0.75, .5))
scales <- list(
x = scale_x_continuous(limits = c(0, 2*pi)),
y = scale_y_continuous(limits = c(0, 1))
)
coord <- coord_polar()
dists <- coord$distance(dat$theta, dat$r, coord$train(scales))
# dists is normalized by dividing by this value, so we'll add it back
# The maximum length of a spiral arc, from (t,r) = (0,0) to (2*pi,1)
maxlen <- spiral_arc_length(1 / (2 * pi), 0, 2 * pi)
# These are the expected lengths. I think they're correct...
expect_equal(dists,
c(0, -1.225737494, -2, -0.5, -5, -0.25, -0.6736885011) / maxlen)
# The picture can be visualized with:
# ggplot(dat, aes(x=theta, y=r)) + geom_path() +
# geom_point(alpha=0.3) + coord_polar()
})
test_that("Polar distance calculation ignores NA's", {
# These are r and theta values; we'll swap them around for testing
x1 <- c(0, 0.5, 0.5, NA, 1)
x2 <- c(0, 1, 2, 0, 1)
dists <- dist_polar(x1, x2)
expect_equal(is.na(dists), c(FALSE, FALSE, TRUE, TRUE))
dists <- dist_polar(x2, x1)
expect_equal(is.na(dists), c(FALSE, FALSE, TRUE, TRUE))
# NA on the end
x1 <- c(0, 0.5, 0.5, 1, NA)
x2 <- c(0, 1, 2, 0, 1)
dists <- dist_polar(x1, x2)
expect_equal(is.na(dists), c(FALSE, FALSE, FALSE, TRUE))
dists <- dist_polar(x2, x1)
expect_equal(is.na(dists), c(FALSE, FALSE, FALSE, TRUE))
# NAs in each vector - also have NaN
x1 <- c(0, 0.5, 0.5, 1, NA)
x2 <- c(NaN, 1, 2, NA, 1)
dists <- dist_polar(x1, x2)
expect_equal(is.na(dists), c(TRUE, FALSE, TRUE, TRUE))
dists <- dist_polar(x2, x1)
expect_equal(is.na(dists), c(TRUE, FALSE, TRUE, TRUE))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.