suppressPackageStartupMessages({
  library(ggplot2)
  library(ggpattern)
})The ‘stripe’ pattern draws a set of (horizontal) straight lines.
The ‘wave’ pattern draws a set of (horizontal) wavy lines.
The ‘crosshatch’ pattern draws a set of vertical lines on top of a set of horizontal lines.
The ‘weave’ pattern draws a set of vertical lines interlaced with a set of horizontal lines.
For more info on these patterns see their {gridpattern} documentation:
| aesthetic | description | default | possible values | 
|---|---|---|---|
| pattern_colour | Stroke colour | ‘grey20’ | colour | 
| pattern_fill | Fill colour | ‘grey80’ | colour | 
| pattern_angle | Rotation angle | 30 | angle in degrees | 
| pattern_density | Approx. fraction of area the pattern fills | 0.2 | value in range [0, 1] (fraction) | 
| pattern_spacing | Spacing between repetitions of pattern | 0.05 | value in pattern_unitsgrid units | 
| pattern_xoffset | Shift pattern along x axis | 0 | value in pattern_unitsgrid units | 
| pattern_yoffset | Shift pattern along y axis | 0 | value in pattern_unitsgrid units | 
| pattern_units | Pattern grid unit | ‘snpc’ | grid::unit()unit i.e. ‘snpc’, ‘cm’, and ‘inches’ | 
| pattern_alpha | Alpha | NA | value in range [0, 1] or NA | 
| pattern_linetype | Stroke linetype | 1 | linetype | 
| pattern_size | Stroke linewidth | 1 | linewidth | 
| pattern_type | Pattern type | NA | See wave and weave pattern documentation | 
| pattern_subtype | Pattern subtype | NA | See weave pattern documentation | 
| pattern_frequency | Frequency | 0.1 | Frequency of waves in ‘wave’ pattern | 
There are also a number of parameters for extra control of legend sizing and aspect ratio adjustments. See the ‘Pattern Parameters - Common’ for more information.
Standard data for all the example plots
df <- data.frame(trt = c("a", "b", "c"), outcome = c(2.3, 1.9, 3.2))
df
#>   trt outcome
#> 1   a     2.3
#> 2   b     1.9
#> 3   c     3.2ggplot(df, aes(trt, outcome)) +
  geom_col(aes(fill=trt),colour='black') +
  theme_bw() +
  labs(title = "Plain ggplot2"){ggpattern} geomggpattern::geom_col_pattern() instead of ggplot2::geom_col().pattern = 'stripe'ggplot2 are usually too small to show off an example of the pattern, so it will usually be necessary to increase the key size.ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(aes(fill=trt),colour='black',
                   pattern='stripe') +
  theme_bw() +
  labs(title = "ggpattern") +
  theme(legend.key.size = unit(1.5, 'cm'))ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(aes(fill=trt, pattern=trt, pattern_type=trt),
                   colour='black', pattern_key_scale_factor=0.5,
                   pattern_spacing=0.7, pattern_frequency=0.7, pattern_units='cm') +
  theme_bw() +
  labs(title = "Use 'stripe' and 'wave' patterns") +
  theme(legend.key.size = unit(1.5, 'cm')) +
  scale_pattern_manual(values=c('stripe', 'wave', 'wave')) +
  scale_pattern_type_manual(values=c(NA, 'triangle', 'sine'))The aesthetic pattern_density roughly corresponds to the fraction of the filled area which should be covered by the pattern.
In the following plot the density of striping is increased to 50% of the fill area.
ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(
    aes(fill=trt, pattern=trt),
    colour          = 'black',
    pattern_density = 0.5
  ) +
  theme_bw() +
  labs(title = "Fixed density of 0.5 (50% of the fill area)") +
  scale_pattern_manual(values=c('stripe', 'crosshatch', 'weave')) +
  theme(legend.key.size = unit(1.5, 'cm'))The ‘weave’ pattern supports a rich set of weave types and subtypes including irregular ‘matt’, ‘twill’ (including ‘herringbone’ and ‘zigzag’ variations), and ‘satin’ weaves . See the weave pattern documentation for more information.
ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(
    aes(pattern_fill2=trt, pattern_type=trt),
    pattern = 'weave',
    colour          = 'black',
    pattern_density = 1.0,
    pattern_fill = 'grey',
    pattern_key_scale_factor = 0.5,
  ) +
  theme_bw() +
  labs(title = "Some 'weave' types") +
  scale_pattern_type_manual(values=c('plain', 'twill', 'satin')) +
  theme(legend.key.size = unit(1.5, 'cm'))ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(
    aes(fill = trt, pattern_density = trt),
    colour          = 'black',
    pattern         = 'stripe'
  ) +
  theme_bw() +
  labs(title = "Aesthetic Mapping of 'trt' to Density") +
  theme(legend.key.size = unit(1.5, 'cm'))scale_pattern_density_manual() can be used to manually control how the variable is mapped to the density.
ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(
    aes(fill = trt, pattern_density = trt),
    colour          = 'black',
    pattern         = 'stripe'
  ) +
  theme_bw() +
  labs(title = "Aesthetic Mapping of 'trt' to Density") +
  theme(legend.key.size = unit(1.5, 'cm')) +
  scale_pattern_density_manual(values = c(a = 0.1, b=0.3, c=0.5))ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(
    aes(fill = trt, pattern_spacing = trt),
    colour          = 'black',
    pattern         = 'stripe'
  ) +
  theme_bw() +
  labs(title = "Aesthetic Mapping of 'trt' to Spacing") +
  theme(legend.key.size = unit(1.5, 'cm'))ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(
    aes(fill = trt, pattern_fill = trt),
    colour          = 'black',
    pattern         = 'stripe'
  ) +
  theme_bw() +
  labs(title = "Aesthetic Mapping of 'trt' to Pattern Fill") +
  scale_pattern_fill_viridis_d() +
  theme(legend.key.size = unit(1.5, 'cm'))