suppressPackageStartupMessages({
  library(dplyr)
  library(ggplot2)
  library(ggpattern)
})

geom_bar_pattern()

(p <- ggplot(mpg, aes(class)) +
  geom_bar_pattern(aes(pattern = class, pattern_angle = class), fill = 'white', colour = 'black',
                   pattern_spacing = 0.03, pattern_key_scale_factor = 1) +
  theme_bw() +
  labs(title = "ggpattern::geom_bar_pattern()") + 
  theme(
    legend.key.size = unit(2.5, 'cm'),
      # legend.justification = c(0, 1),
      # legend.position = c(0, 1),
    legend.direction = 'horizontal',
    legend.position = 'bottom'
  ) + 
  coord_fixed(ratio = 1/15) + 
  scale_pattern_discrete(guide = guide_legend(nrow = 1)))

pie graph with geom_bar_pattern()

df <- data.frame(
  group = c("Cool", "But", "Use", "Less"),
  value = c(10, 20, 30, 40)
)

(p <- ggplot(df, aes(x="", y = value, pattern = group, pattern_angle = group))+
  geom_bar_pattern(
    width                = 1, 
    stat                 = "identity", 
    fill                 = 'white', 
    colour               = 'black',
    pattern_aspect_ratio = 1, 
    pattern_density      = 0.3
  ) +
  coord_polar("y", start=0) + 
  theme_void(20) + 
  theme(
    legend.key.size = unit(2.5, 'cm')
  ) + 
  labs(title = "ggpattern::geom_bar_pattern() + coord_polar()"))

geom_bin2d_pattern()

(p <- ggplot(diamonds, aes(x, y)) + #xlim(4, 10) + ylim(4, 10) +
  geom_bin2d_pattern(aes(pattern_density = ..density..), fill = 'white', bins = 10) +
  theme_bw() +
  labs(title = "ggpattern::geom_bin2d_pattern()"))

geom_boxplot_pattern()

(p <- ggplot(mpg, aes(class, hwy)) +
  geom_boxplot_pattern(aes(pattern = class, pattern_fill=class), pattern_spacing = 0.03) +
  # coord_flip() +
  theme_bw() +
  labs(title = "ggpattern::geom_boxplot_pattern()") + 
  theme(legend.key.size = unit(1.5, 'cm')) + 
  coord_fixed(1/4))

geom_col_pattern()

df <- data.frame(trt = c("a", "b", "c"), outcome = c(2.3, 1.9, 3.2))

(p <- ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(aes(pattern = trt, fill=trt), colour='black', pattern_density = 0.5, pattern_key_scale_factor = 0.95) +
  theme_bw() +
  labs(title = "ggpattern::geom_col_pattern()") + 
  theme(
    legend.key.size = unit(2.5, 'cm')
  ) + 
  coord_fixed(ratio = 1/4))

geom_crossbar_pattern()

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)
)

(p <- 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() +
  labs(title = "ggpattern::geom_crossbar_pattern()") + 
  theme(legend.key.size = unit(3, 'cm')) + 
  coord_fixed(ratio = 1/5))

geom_density_pattern()

(p <- ggplot(mtcars) +
  geom_density_pattern(aes(x=mpg, pattern_fill=as.factor(cyl), pattern = as.factor(cyl)), 
                       fill = 'white',
                       pattern_density = 0.4, 
                       pattern_key_scale_factor = 8/9, 
                       pattern_lwd = 3) +
  theme_bw() +
  labs(title = "ggpattern::geom_density_pattern()") + 
  theme(legend.key.size = unit(1, 'cm')) +
   # theme(legend.position = 'none') +
  coord_fixed(ratio = 100))

geom_map_pattern()

library(maps)

crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests)
crimesm <- reshape2::melt(crimes, id = 1)

states_map <- map_data("state")

(p <- ggplot(crimes, aes(map_id = state)) +
    geom_map_pattern(
      aes(
        # fill            = Murder,
        pattern_fill    = Murder,
        pattern_spacing = state,
        pattern_density = state,
        pattern_angle   = state,
        pattern         = state
      ),
      fill = 'white',
      colour = 'black',
      map = states_map
    ) +
    expand_limits(x = states_map$long, y = states_map$lat) +
    coord_map() +
    theme_bw() +
    labs(title = "ggpattern::geom_map_pattern()") + 
    scale_pattern_density_discrete(range = c(0.01, 0.3)) + 
    scale_pattern_spacing_discrete(range = c(0.01, 0.05)) + 
    theme(legend.position = 'none'))

geom_polygon_pattern()

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Data frame for a polyagon
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
polygon_df <- dplyr::tibble(
  angle = seq(0, 2*pi, length.out = 7) + pi/6,
  x     = cos(angle),
  y     = sin(angle)
)

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Create a plot of a patterned polygon
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(p <- 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    = '#002366', 
    pattern_lwd     = 5,
    pattern_colour  = 'lightblue',
    pattern_angle   = 45
  ) + 
  labs(title = "ggpattern") + 
  coord_equal() + 
  theme_bw(25) + 
  theme(axis.title = element_blank()))

geom_rect_pattern()

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),
  stringsAsFactors = FALSE
)


(p <- ggplot(plot_df) +
  geom_rect_pattern(
    aes(
      xmin=xmin, ymin=ymin, xmax=xmax, ymax=ymax,
      # pattern         = I(pname),
      pattern_angle   = I(angle),
      pattern_colour  = I(pcolour),
      pattern_spacing = I(pspace)
    ),
    pattern         = 'circle',
    fill            = 'white',
    colour          = 'black',
    pattern_density = 0.3
  ) +
  theme_bw() +
  labs(title = "ggpattern::geom_rect_pattern()") + 
  theme(legend.key.size = unit(1.5, 'cm')))

geom_ribbon_pattern()

huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron))

(p <- 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 = 0,
                      outline.type = 'legacy') +
  # geom_line(aes(y = level)) +
  theme_bw() +
  labs(title = "ggpattern::geom_ribbon_pattern()") + 
  theme(legend.key.size = unit(1.5, 'cm')))

geom_sf_pattern()

nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
nc <- nc %>% filter(between(CNTY_ID, 1820, 1830))


(p <- ggplot(nc) +
  geom_sf_pattern(aes(pattern = NAME, fill=NAME),
                  pattern_aspect_ratio = 2.8) +
  theme_bw() +
  labs(title = "ggpattern::geom_sf()") + 
  theme(legend.key.size = unit(1.5, 'cm')))
#> Warning: Ignoring unknown aesthetics: fill

geom_tile_pattern()

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)
)

(p <- ggplot(df, aes(x, y)) +
  geom_tile_pattern(aes(fill = z, pattern = z), colour = "grey50") +
  theme_bw() +
  labs(title = "ggpattern::geom_tile_pattern()") + 
  theme(legend.key.size = unit(2.5, 'cm')) + 
  coord_fixed(ratio = 3))

geom_violin_pattern()

(ggplot(mtcars, aes(as.factor(cyl), mpg)) +
  geom_violin_pattern(aes(pattern = as.factor(cyl))) +
  theme_bw() +
  labs(title = "ggpattern::geom_violin_pattern()") + 
  theme(
    legend.key.width  = unit(2, 'cm'),
    legend.key.height = unit(2, 'cm'),
    legend.position = 'right'
  ) + 
  coord_fixed(1/15))