test_that("geometry patterns work as expected", {
skip_on_ci()
skip_on_cran()
skip_if_not_installed("vdiffr")
library("vdiffr")
expect_doppelganger("area", {
huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron))
ggplot(huron, aes(year)) +
geom_area_pattern(aes(y = level))
})
expect_doppelganger("bar", {
ggplot(ggplot2::mpg, aes(class)) +
geom_bar_pattern(
aes(
pattern = class,
pattern_angle = class
),
fill = 'white',
colour = 'black',
pattern_spacing = 0.025
) +
theme_bw(18) +
labs(title = "ggpattern::geom_bar_pattern()") +
theme(legend.position = 'none') +
coord_fixed(ratio = 1/15) +
scale_pattern_discrete(guide = guide_legend(nrow = 1))
})
suppressWarnings( # Removed 478 rows containing non-finite values (stat_bin2d)
expect_doppelganger("bin2d", {
ggplot(ggplot2::diamonds, aes(x, y)) +
xlim(4, 10) + ylim(4, 10) +
geom_bin2d_pattern(aes(pattern_spacing = ..density..),
fill = 'white', bins = 6, colour = 'black', linewidth = 1) +
theme_bw(18) +
theme(legend.position = 'none') +
labs(title = "ggpattern::geom_bin2d_pattern()")
}))
expect_doppelganger("boxplot", {
ggplot(ggplot2::mpg, aes(class, hwy)) +
geom_boxplot_pattern(
aes(
pattern = class,
pattern_fill = class
),
pattern_spacing = 0.03
) +
theme_bw(18) +
labs(title = "ggpattern::geom_boxplot_pattern()") +
theme(legend.position = 'none') +
coord_fixed(1/8)
})
expect_doppelganger("col", {
df <- data.frame(trt = c("a", "b", "c"), outcome = c(2.3, 1.9, 3.2))
ggplot(df, aes(trt, outcome)) +
geom_col_pattern(
aes(
pattern = trt,
fill = trt
),
colour = 'black',
pattern_density = 0.5,
pattern_key_scale_factor = 1.11
) +
theme_bw(18) +
labs(title = "ggpattern::geom_col_pattern()") +
theme(legend.position = 'none') +
coord_fixed(ratio = 1/2)
})
expect_doppelganger("crossbar", {
df <- data.frame(
trt = factor(c(1, 1, 2, 2)),
resp = c(1, 5, 3, 4),
group = factor(c(1, 2, 1, 2)),
upper = c(1.1, 5.3, 3.3, 4.2),
lower = c(0.8, 4.6, 2.4, 3.6)
)
ggplot(df, aes(trt, resp, colour = group)) +
geom_crossbar_pattern(
aes(
ymin = lower,
ymax = upper,
pattern_angle = trt,
pattern = group
), width = 0.2,
pattern_spacing = 0.02
) +
theme_bw(18) +
labs(title = "ggpattern::geom_crossbar_pattern()") +
theme(legend.position = 'none') +
coord_fixed(ratio = 1/3)
})
expect_doppelganger("density", {
ggplot(mtcars) +
geom_density_pattern(
aes(
x = mpg,
pattern_fill = as.factor(cyl),
pattern = as.factor(cyl)
),
fill = 'white',
pattern_key_scale_factor = 1.2,
pattern_density = 0.4
) +
theme_bw(18) +
labs(title = "ggpattern::geom_density_pattern()") +
theme(legend.key.size = unit(2, 'cm')) +
coord_fixed(ratio = 100)
})
expect_doppelganger("histogram", {
ggplot(ggplot2::diamonds, aes(carat)) +
geom_histogram_pattern(pattern = "stripe", bins = 30)
})
expect_doppelganger("polygon", {
angle <- seq(0, 2*pi, length.out = 7) + pi/6
polygon_df <- data.frame(
angle = angle,
x = cos(angle),
y = sin(angle)
)
ggplot(polygon_df) +
geom_polygon_pattern(
aes(x = x, y = y),
fill = 'white',
colour = 'black',
pattern_spacing = 0.15,
pattern_density = 0.4,
pattern_fill = 'lightblue',
pattern_colour = '#002366',
pattern_angle = 45
) +
labs(title = "ggpattern") +
coord_equal() +
theme_bw(25) +
theme(axis.title = element_blank())
})
expect_doppelganger("polygon_hole", {
# example modified from {ggplot2} unit tests
tbl <- data.frame(
x = c(
0, 10, 10, 0,
20, 30, 30, 20,
22, 28, 28, 22
),
y = c(
0, 0, 10, 10,
20, 20, 30, 30,
22, 22, 28, 28
),
group = c(rep(1, 4), rep(2, 8)),
subgroup = c(rep(1, 8), rep(2, 4))
)
p <- ggplot(tbl, aes(x, y, group = group, subgroup = subgroup)) +
geom_polygon_pattern(fill="lightblue", color="black")
})
expect_doppelganger("rect", {
plot_df <- data.frame(
xmin = c(0, 10),
xmax = c(8, 18),
ymin = c(0, 10),
ymax = c(5, 19),
type = c('a', 'b'),
angle = c(45, 0),
pname = c('circle', 'circle'),
pcolour = c('red', 'blue'),
pspace = c(0.03, 0.05),
size = c(0.5, 1),
stringsAsFactors = FALSE
)
ggplot(plot_df) +
geom_rect_pattern(
aes(
xmin=xmin, ymin=ymin, xmax=xmax, ymax=ymax,
pattern_angle = I(angle),
pattern_colour = I(pcolour),
pattern_spacing = I(pspace),
pattern_size = I(size)
),
pattern = 'circle',
fill = 'white',
colour = 'black',
pattern_density = 0.3
) +
theme_bw(18) +
labs(title = "ggpattern::geom_rect_pattern()") +
theme(legend.key.size = unit(1.5, 'cm'))
})
expect_doppelganger("ribbon", {
huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron))
ggplot(huron, aes(year)) +
geom_ribbon_pattern(
aes(
ymin = level - 1,
ymax = level + 1
),
fill = NA,
colour = 'black',
pattern = 'circle',
pattern_spacing = 0.03,
pattern_density = 0.5,
pattern_angle = 30,
outline.type = 'full'
) +
theme_bw(18) +
labs(title = "ggpattern::geom_ribbon_pattern()")
})
expect_doppelganger("tile", {
df <- data.frame(
x = rep(c(2, 5, 7, 9, 12), 2),
y = rep(c(1, 2), each = 5),
z = factor(rep(1:5, each = 2)),
w = rep(diff(c(0, 4, 6, 8, 10, 14)), 2)
)
ggplot(df, aes(x, y)) +
geom_tile_pattern(
aes(
fill = z,
pattern = z
),
colour = "grey50"
) +
theme_bw(18) +
labs(title = "ggpattern::geom_tile_pattern()") +
theme(
legend.position = 'bottom',
legend.key.size = unit(1.5, 'cm')
) +
coord_fixed(ratio = 4)
})
expect_doppelganger("violin", {
ggplot(mtcars, aes(as.factor(cyl), mpg)) +
geom_violin_pattern(aes(pattern = as.factor(cyl))) +
theme_bw(18) +
labs(title = "ggpattern::geom_violin_pattern()") +
theme(
legend.key.size = unit(2, 'cm')
) +
coord_fixed(1/15)
})
})
test_that("geom_sf_pattern() works as expected", {
skip_on_ci()
skip_if_not_installed("sf")
skip_if_not_installed("vdiffr")
library("vdiffr")
expect_doppelganger("sf", {
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
indices <- which(nc$CNTY_ID >= 1820 & nc$CNTY_ID <= 1830)
nc <- nc[indices, ]
p <- ggplot(nc) +
geom_sf_pattern(
aes(
pattern = NAME,
fill = NAME
),
pattern_aspect_ratio = 2.8
) +
theme_bw(15) +
theme(legend.key.size = unit(1.5, 'cm')) +
labs(title = "ggpattern::geom_sf()")
p
})
expect_doppelganger("sf-hole", {
# coords <- read.csv(textConnection(
# 'x,y,idx
# 0,0,1
# 4,0,1
# 4,4,1
# 0,4,1
# 0,0,1
# 1,1,2
# 2,1,2
# 2,2,2
# 1,2,2
# 1,1,2'))
# this_sf <- coords %>%
# sfheaders::sf_polygon(x='x', y='y', linestring_id = 'idx')
# Avoid {sfheaders} Suggests by using output from `dput(this_sf)`
this_sf <- structure(list(id = 1L,
geometry = structure(list(structure(list(
structure(c(0, 4, 4, 0, 0, 0, 0, 4, 4, 0), .Dim = c(5L, 2L)),
structure(c(1, 2, 2, 1, 1, 1, 1, 2, 2, 1), .Dim = c(5L, 2L))),
class = c("XY", "POLYGON", "sfg"))),
n_empty = 0L,
crs = structure(list(
input = NA_character_,
wkt = NA_character_),
class = "crs"),
class = c("sfc_POLYGON", "sfc"),
precision = 0,
bbox = structure(c(xmin = 0, ymin = 0, xmax = 4, ymax = 4),
class = "bbox"))),
class = c("sf", "data.frame"),
sf_column = "geometry", row.names = 1L)
ggplot(this_sf) +
geom_sf_pattern(aes(geometry = geometry), fill = 'lightblue')
})
})
test_that("geom_map_pattern() works as expected", {
skip_on_ci()
skip_on_cran()
skip_if_not_installed("vdiffr")
library("vdiffr")
skip_if_not_installed("mapproj")
skip_if_not_installed("maps")
expect_doppelganger("map", {
library(maps)
crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests)
states_map <- map_data("state")
ggplot(crimes, aes(map_id = state)) +
geom_map_pattern(
aes(
# fill = Murder,
pattern_spacing = state,
pattern_density = state,
pattern_angle = state,
pattern = state
),
fill = 'white',
map = states_map
) +
expand_limits(x = states_map$long, y = states_map$lat) +
coord_map() +
theme_bw() +
labs(title = "ggpattern::geom_map_pattern()")
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.