rm(list = ls())
library("ggpattern")
## Warning: 程辑包'ggpattern'是用R版本4.1.3 来建造的
library("ggplot2") 
set.seed(92634)                                # Create example data
data <- data.frame(value = rnorm(30, 10),
                   group = letters[1:3])
head(data)                                     # Head of example data
##      value group
## 1 9.795025     a
## 2 9.442812     b
## 3 8.954915     c
## 4 9.456803     a
## 5 7.709386     b
## 6 9.589968     c
#Example 1: Drawing Barplot with Pattern Using geom_bar_pattern Function
ggplot(data, aes(group, value, fill = group)) +    # Create barplot with pattern
  geom_bar_pattern(stat = "identity") + theme_classic()

#Example 2: Manually Specify Colors of Pattern Using pattern_color & pattern_fill Arguments
ggplot(data, aes(group, value, fill = group)) +    # Modify colors of pattern
  geom_bar_pattern(stat = "identity",
                   pattern_color = "white",
                   pattern_fill = "black")

#Example 3: Drawing Barplot with Pattern for Each Group Using aes Function & pattern Argument
ggplot(data, aes(group, value, fill = group)) +    # Different pattern for each group
  geom_bar_pattern(stat = "identity",
                   pattern_color = "white",
                   pattern_fill = "black",
                   aes(pattern = factor(group)))

#Example 4: Drawing Density Plot with Pattern Using geom_density_pattern Function
ggplot(data, aes(value, fill = group)) +           # Create density plot with pattern
  geom_density_pattern(pattern_color = "white",
                       pattern_fill = "black",
                       aes(pattern = group))

#Example 5: Drawing Transparent Density Plot with Pattern Using alpha & pattern_alpha Arguments
ggplot(data, aes(value, fill = group)) +           # Transparent density plot with pattern
  geom_density_pattern(pattern_color = "white",
                       pattern_fill = "black",
                       alpha = 0.5,
                       pattern_alpha = 0.5,
                       aes(pattern = group))

#Example 6: Drawing Boxplot with Pattern Using geom_boxplot_pattern Function
ggplot(data, aes(value, fill = group)) +           # Create boxplot with pattern
  geom_boxplot_pattern(pattern_color = "white",
                       pattern_fill = "black",
                       aes(pattern = group))

#######################################
tiling3_pattern <- function(params, boundary_df, aspect_ratio, legend = FALSE) {
  args <- as.list(params)
  args <- args[grep("^pattern_", names(args))]
  
  # hexagonal tiling using "regular_polygon" pattern
  args$pattern <- "polygon_tiling"
  
  # three-color tiling using `fill`, `pattern_fill` and their "average"
  avg_col <- gridpattern::mean_col(params$fill, params$pattern_fill)
  args$pattern_fill <- c(params$fill, avg_col, args$pattern_fill)
  
  args$x <- boundary_df$x
  args$y <- boundary_df$y
  args$id <- boundary_df$id
  args$prefix <- ""
  
  do.call(gridpattern::patternGrob, args)
}
options(ggpattern_geometry_funcs = list(tiling3 = tiling3_pattern))
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(fill = trt, pattern_type = trt), 
                   pattern = 'tiling3', pattern_angle = 45) +
  scale_pattern_type_manual(values = c("hexagonal", "tetrakis_square", "rhombille")) +
  theme(legend.key.size = unit(1.5, 'cm'))

#####################################
head(mpg,2)
## # A tibble: 2 x 11
##   manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class 
##   <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr> 
## 1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compa~
## 2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compa~
ggplot(mpg, aes(class)) +
  geom_bar_pattern(
    aes(
      pattern_angle = class
    ), 
    pattern         = 'placeholder',
    pattern_type    = 'kitten',
    fill            = 'white', 
    colour          = 'black',
    pattern_spacing = 0.025
  ) +
  theme_bw(18) +
  labs(
    title = "ggpattern::geom_bar_pattern()",
    subtitle = "pattern = 'placeholder', pattern_type = 'kitten'"
  ) + 
  theme(legend.position = 'none') +
  coord_fixed(ratio = 1/15) + 
  scale_pattern_discrete(guide = guide_legend(nrow = 1))

################################################
if (require("magick")) {
  
  standard_image_filenames <- c(
    system.file('img', 'Rlogo.png'    , package = 'png'),
    system.file('img', 'bug.jpg'      , package = 'ggpattern'),
    system.file('img', 'magpie.jpg'   , package = 'ggpattern'),
    system.file('img', 'seamless1.jpg', package = 'ggpattern'),
    system.file('img', 'seamless2.jpg', package = 'ggpattern'),
    system.file('img', 'seamless3.jpg', package = 'ggpattern')
  )
  
  p <- ggplot(mpg, aes(class, hwy)) +
    geom_boxplot_pattern(
      aes(
        pattern_filename = class, 
      ), 
      pattern       = 'image',
      pattern_type  = 'tile',
      pattern_scale = 0.5
    ) +
    theme_bw(18) +
    labs(
      title = "ggpattern::geom_boxplot_pattern() + coord_flip()",
      subtitle = "pattern = 'image'"
    ) + 
    scale_pattern_filename_discrete(choices = standard_image_filenames) +
    theme(legend.position = 'none') + 
    coord_fixed(1/8)
  
  p
  
}
## 载入需要的程辑包:magick
## Linking to ImageMagick 6.9.12.3
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11

#https://statisticsglobe.com/ggpattern-r-package
#https://coolbutuseless.github.io/package/ggpattern/articles/geom-gallery-array.html#geom-bar-pattern-