Nothing
test_raster <- function(ref_png, fn, update = FALSE) {
f <- file.path("../figs/array", ref_png)
if (update) my_png(f, fn)
ref <- magick::image_read(f)
tmpfile <- tempfile(fileext = ".png")
my_png(tmpfile, fn)
image <- magick::image_read(tmpfile)
unlink(tmpfile)
diff <- magick::image_compare(image, ref, "AE")
bool <- attr(diff, "distortion") < 0.01
if (!bool) {
grDevices::dev.new()
grid::pushViewport(grid::viewport(x = 0.25, width = 0.5))
grid::grid.raster(ref)
grid::popViewport()
grid::pushViewport(grid::viewport(x = 0.75, width = 0.5))
grid::grid.raster(image)
grid::popViewport()
}
expect_true(bool)
}
my_png <- function(f, fn) {
current_dev <- grDevices::dev.cur()
grDevices::png(f, type = "cairo", width = 240, height = 240)
val <- fn()
grDevices::dev.off()
if (current_dev > 1) grDevices::dev.set(current_dev)
invisible(val)
}
test_that("array patterns works as expected", {
skip_on_ci()
skip_on_cran()
skip_if_not(capabilities("cairo"))
skip_if_not_installed("magick", "2.7.4")
skip_if_not_installed("ragg")
x <- 0.5 + 0.5 * cos(seq(2 * pi / 4, by = 2 * pi / 6, length.out = 6))
y <- 0.5 + 0.5 * sin(seq(2 * pi / 4, by = 2 * pi / 6, length.out = 6))
test_raster("gradient.png",
function() grid.pattern_gradient(x, y, fill="blue", fill2="green",
orientation="radial", use_R4.1_gradients = FALSE))
test_raster("gradient_horizontal.png",
function() grid.pattern_gradient(x, y, fill="blue", fill2="green",
orientation="horizontal", use_R4.1_gradients = FALSE))
logo_filename <- system.file("img", "Rlogo.png" , package="png")
test_raster("image.png", function() {
grid.pattern_image(x, y, filename=logo_filename, type="fit")
})
test_raster("image_expand.png", function() {
grid.pattern_image(x, y, filename=logo_filename, type="expand")
})
test_raster("image_tile.png", function() {
grid.pattern_image(x, y, filename=logo_filename, type="tile", scale=-2)
})
test_raster("image_none.png", function() {
grid.pattern_image(x, y, filename=logo_filename, type="none", scale=-1)
})
test_raster("image_squish.png", function() {
grid.pattern_image(x, y, filename=logo_filename, type="squish")
})
test_raster("magick.png",
function() grid.pattern_magick(x, y, type="octagons", fill="blue", scale=2))
test_raster("placeholder.png",
function() grid.pattern_placeholder(x, y, type="bear"))
test_raster("plasma_zero.png",
function() grid.pattern_plasma(x = c(0.5, 0.5, 0.5, 0.5),
y = c(0, 1, 1, 0), fill = "green"))
test_raster("plasma.png",
function() {
magick::magick_set_seed(42) # introduced in v2.7.4
grid.pattern_plasma(x, y, fill = "green")
})
playing_card_symbols <- c("\u2660", "\u2665", "\u2666", "\u2663")
test_raster("text.png",
function() grid.pattern_text(x, y, shape = playing_card_symbols,
colour = c("black", "red", "red", "black"),
use_R4.1_masks = TRUE,
size = 18, spacing = 0.1, angle = 0))
gp <- gpar(fill = c("blue", "red", "yellow", "green"), col = "black")
test_raster("rose.png",
function() grid.pattern_rose(x, y,
spacing = 0.15, density = 0.5, angle = 0,
use_R4.1_masks = NULL,
frequency = 1:4, gp = gp))
create_pattern_simple <- function(width, height, params, legend) {
choice <- params$pattern_type
if (is.null(choice) || is.na(choice) || !is.character(choice)) {
choice <- 'a'
}
values <- switch(
choice,
a = rep(c(0, 1, 0, 1, 1, 0, 0, 1, 1, 1), each = 3),
b = rep(c(1, 0, 0, 1, 0.5, 0.5, 1, 1, 0, 0, 0, 0, 0, 0.5), each = 7),
c = rep(seq(0, 1, 0.05), each = 7),
rep(c(0, 1, 0, 1, 1, 0, 0, 1, 1, 1), each = 3)
)
simple_array <- array(values, dim = c(height, width, 4))
simple_array
}
options(ggpattern_array_funcs = list(simple = create_pattern_simple))
test_raster("simple.png", function() grid.pattern("simple", x, y, type = "b"))
# clippingPathGrob()
clippee <- patternGrob("circle", gp = gpar(col = "black", fill = "yellow"),
spacing = 0.1, density = 0.5)
angle <- seq(2 * pi / 4, by = 2 * pi / 6, length.out = 7)
x_hex_outer <- 0.5 + 0.5 * cos(angle)
y_hex_outer <- 0.5 + 0.5 * sin(angle)
x_hex_inner <- 0.5 + 0.25 * cos(rev(angle))
y_hex_inner <- 0.5 + 0.25 * sin(rev(angle))
clipper <- grid::pathGrob(x = c(x_hex_outer, x_hex_inner),
y = c(y_hex_outer, y_hex_inner),
id = rep(1:2, each = 7),
rule = "evenodd")
clipped <- clippingPathGrob(clippee, clipper, use_R4.1_clipping = FALSE)
test_raster("clipGrob.png", function() grid.draw(clipped))
# alphaMaskGrob()
clipper <- editGrob(clipper, gp = gpar(col = NA, fill = "black"))
masked <- alphaMaskGrob(clippee, clipper, use_R4.1_masks = FALSE)
test_raster("alphaMaskGrob.png", function() grid.draw(masked))
clippee <- rectGrob(gp = gpar(fill = "blue", col = NA))
clipper <- editGrob(clipper, gp = gpar(col = "black", lwd=20, fill = rgb(0, 0, 0, 0.5)))
masked <- alphaMaskGrob(clippee, clipper, use_R4.1_masks = NULL)
test_raster("alphaMaskGrob_transparent.png", function() grid.draw(masked))
clippee <- rectGrob(gp = gpar(fill = "blue", col = NA))
clipper <- editGrob(clipper, gp = gpar(col = "black", lwd=20, fill = rgb(0, 0, 0, 0.5)))
bitmapType = getOption("bitmapType")
options(bitmapType = "cairo")
masked <- alphaMaskGrob(clippee, clipper, use_R4.1_masks = FALSE, png_device = grDevices::png)
test_raster("alphaMaskGrob_cairo.png", function() grid.draw(masked))
options(bitmapType = bitmapType)
# ambient
skip_if_not_installed("ambient")
test_raster("ambient.png",
function() {
set.seed(42)
grid.pattern_ambient(x, y, fill = "green", fill2 = "blue")
})
test_raster("ambient_worley.png",
function() {
set.seed(42)
grid.pattern_ambient(x, y, type = "worley", fill = "green", fill2 = "blue")
})
})
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.