- Fixes a bug where the "hatch" pattern failed when
pattern_subtypewasNA(the{ggpattern}default) instead ofNULL(#106).
- The
"indented"(formerly"triangle") wave type now uses a wider stroke in order to better match the apparent stroke widths of the new wave types. Users who relied on the previous visual appearance should reducedensityto compensate.
-
New "hatch" pattern with corresponding
grid.pattern_hatch()andnames_hatch()(#97). -
New "line" pattern with corresponding
grid.pattern_line(). Unlike the "stripe" pattern which fills bands with solid colour, "line" draws stroked lines using the device's native line rendering, enabling all of R's built-inlinetypevalues (including"dotdash","twodash", and custom line types specified as hex strings per?par). -
The preexisting "wave" pattern gains ten new
typevalues, areverseparameter, astaggerparameter, andnames_wave(#100, #101). -
New
mix_col()that mixes colors via Munsell color space usingaqp::mixMunsell(). Requires the suggested package{aqp}.
-
Fixes a bug where geometry-based patterns (e.g. "stripe", "crosshatch", "wave") could silently disappear in small viewports when
pattern_key_scale_factorwas a relatively large value (#95). -
The following "placeholder" pattern updates (#83):
-
The following placeholder pattern names are now serviced by placecats.com
- "kitten" and "kittenbw"
-
The following placeholder pattern names are now serviced by placehold.co
- "placeholder" and "placeholderbw"
-
The "placeholderbw" name now provides a pure black-and-white image (i.e. no grey).
-
-
Fixes a bug where the
"wavy"(aliases"sine","undy") and"indented"(alias"triangle") wave types had an effective wavelength of(n-1)/ntimes the requested wavelength, wherenis the number of wavelength-spaced grid positions spanning the viewport.
- New pattern "aRtsy" with corresponding
grid.pattern_aRtsy()with patterns powered by the{aRtsy}package (#87).
-
grid.pattern_weave()adds the newunitsparameter that most other "geometry" pattern functions received in gridpattern v1.2.1. -
The "polygon_tiling" pattern should now respect the
unitsparameter if set to a value different from the "snpc" default (#82). -
For the "polygon_tiling" pattern
type = "18.18.3*"the size of the eighteen-sided polygons have been increased a teeny bit and this polygon tiling should look a bit cleaner. -
The following "placeholder" pattern updates (#83):
-
The following placeholder pattern names are now serviced by lucidinternets.com:
- "cage" and "cagebw"
- "murray" and "murraybw"
- "seagal" and "seagalbw"
-
The following placeholder pattern names have been removed since their associated web service no longer works:
- "lorempixel" and "lorempixelbw" (service unavailable since 2022)
- "placeimg" and "placeimgbw" (support officially ended July 2023)
-
The "dummybw" name now provides a pure black-and-white image (i.e. no grey).
-
Fixes a regression for the "placeholderbw" name where it redirected to the "seagal" name instead of "placeholder".
-
- The default
typefor the "placeholder" pattern is now "bear" instead of "kitten". Explicitly settype = "kitten"to continue to use the "kitten" placeholder but note that although the "kitten" placeholder website isn't completely down it has been buggy recently (#73).
-
patternFill()wrapspatternGrob()to return agrid::pattern()fill object (#70). -
The "geometry" patterns (e.g. "circle", "stripe", etc.) now allow the
fillto be pattern fills (#67). -
The "geometry" patterns (e.g. "circle", "stripe", etc.) now allow the new
unitsparameter to set whichgrid::unit()to use for the thespacing,xoffset, andyoffsetparameters (and for the "wave" pattern also theamplitudeandfrequencyparameters) (#58). By default it will continue to be "snpc" units but can now be changed to "cm", "in", etc. -
update_alpha()updates fill colour and/or pattern transparency.- It is a fork of
ggplot2::fill_alpha()by @teunbrand. - It does not depend on
{ggplot2}or{scales}. - It does not throw an error with a length one list of a vector of multiple colours.
- It is available as a "standalone" file.
You may copy its source under the permissive MIT license into your own R package by either
using
usethis::use_standalone("trevorld/gridpattern", "standalone-update_alpha.R")or simply copyingstandalone-update_alpha.Rinto your R directory and addinggrDevices,grid, andrlangto theImportsof yourDESCRIPTIONfile.
- It is a fork of
-
For completeness there is now a new "fill" pattern with corresponding
grid.pattern_fill()which draws a simple fill pattern. -
For completeness there is now a
grid.pattern_none()corresponding to the previously supported "none" pattern which draws nothing.
- The
wavepattern no longer quietly and incorrectly ignores thefrequencyparameter. The effective wavelength of the wave pattern is now1 / frequencyinstead ofspacing. Howeverfrequencywill continue to default to1 / spacing. clippingPathGrob()can now more efficiently compute arasterGrob()approximation viaragg::agg_capture()and forpng_devicefunctions that support the clipping path feature such aspng(type = "cairo")(#74).alphaMaskGrob()can now more efficiently compute arasterGrob()approximation forpng_devicefunctions that support the alpha mask feature such aspng(type = "cairo")(#75).alphaMaskGrob()andclippingPathGrob()now switch back to the previously open graphics device if they open and close any new graphics devices.
- "text" pattern example now skipped if ran within certain graphics devices like
pdf()that can't handle the playing cards Unicode glyphs (#68).
reset_image_cache()resets the image cache used bygrid.pattern_image()andgrid.pattern_placeholder()to store images (#63).
- The function
guess_has_R4.1_features()is now available as a "standalone" file. You may copy its source under the permissive MIT No Attribution (MIT-0) license into your own R package by either usingusethis::use_standalone("trevorld/gridpattern", "standalone-guess_has_R4.1_features.R")or simply copyingstandalone-guess_has_R4.1_features.Rinto yourRdirectory and addinggrDevicesandutilsto theImportsof yourDESCRIPTIONfile. - If
{vdiffr}has been updated to at least v1.0.6 (released 2023-08-25) thenguess_has_R4.1_features()should now always correctly guess R4.1 feature support for thesvglite::svglite()andvdiffr:::svglite()graphics devices.
- An internal function
convert_polygon_sf_to_polygon_df()will now be a bit more quiet (throw WARNINGs less often).
guess_has_R4.1_features()can now also take advantage ifdev.capabilities()explicitly indicates that a feature is not supported in active graphics device.- To match aesthetic changes in
{ggplot2}one may now use the parameterlinewidthto set polygon/path line widths ingrid.pattern_circle(),grid.pattern_crosshatch(),grid.pattern_pch(),grid.pattern_polygon_tiling(),grid.pattern_regular_polygon(),grid.pattern_stripe(),grid.pattern_rose(),grid.pattern_wave(), andgrid.pattern_weave(). For backwards compatibility one may continue to usesizeas well. Continue to usesize(orgp) to set the fontsize ingrid.pattern_text(). Bothpattern_linewidthandpattern_sizewill be available for use in custom patterns (#57).
-
Fixes bug with
grid.pattern_image()withtype = "tile"(#47). Additionallygrid.pattern_image()now supportsgravityargument whentype = "tile". -
If the active graphics device has also implemented the new R 4.2
dev.capabilities()support thenguess_has_R4.1_features()can now better guess R 4.1 graphic feature support when called within R 4.2.- In particular
guess_has_R4.1_features()can now better guess R 4.1 graphic feature support in the{grDevices}bitmap devices (i.e.bmp(),jpeg(),png(),tiff()) when called within R 4.2 on Windows. Previously it was not possible to easily distinguish on Windows if the device was called withtype = "windows"ortype = "cairo"and hence we had to conservatively guess no such support even iftype = "cairo"had been specified (and within R 4.1 we must still conservatively do so). - Also if in the future any graphic devices add R 4.1 graphic feature support as well as
R 4.2
dev.capabilities()support then we should now be able to correctly guess such support within R 4.2 without needing to manually updateguess_has_R4.1_features().
- In particular
-
guess_has_R4.1_features()now supports an argumentfeatureswhich allows one to limit the guessing of R4.1 feature support to a subset ofc("clippingPaths", "gradients", "masks", "patterns"). Although all known graphic devices either implements all or none of these features this need not hold true in the future.
grid.pattern_rose()andgrid.pattern_text()now "clip" their boundary using an "alpha mask" rather than a "clipping path". Now use the argumentuse_R4.1_masks, the global optionggpattern_use_R4.1_masks, or the global optionggpattern_use_R4.1_featuresto toggle on/off the R 4.1 alpha mask feature instead of using theuse_R4.1_clippingargument or the global optionggpattern_use_R4.1_clippingas before (the latter continue to toggle on/off the R 4.1 clipping path feature inclippingPathGrob()).
-
alphaMaskGrob()is a function that (alpha) masks one grob by using a second grob to specify the (alpha) mask.- If
use_R4.1_masksisTRUEwe simply use the new R 4.1 (alpha) masks feature. - If
use_R4.1_masksisFALSEwe generate agrid::rasterGrob()approximation. - If
use_R4.1_masksisNULLtry to guess an appropriate choice. - The default for
use_R4.1_maskscan be set byoptions("ggpattern_use_R4.1_masks").
- If
guess_has_R4.1_features()now returnsTRUEfor theragg::agg_jpeg(),ragg::agg_ppm(), andragg::agg_tiff()devices ifpackageVersion("ragg") >= '1.2.0'. It also returnsTRUEforsvglite::svglite()ifpackageVersion("svglite") >= '2.1.0'.clippingPathGrob()will now consistently - as previously documented - useragg::agg_png()as the defaultpng_devicegraphics device if it is available anduse_R4.1_clippingisFALSE.grid.pattern_image()should no longer throw an inscrutableError in magick_image_readpath... error on certain platforms such as Windows (#47).
guess_has_R4.1_features()is now an exported function. It guesses whether the "active" graphic devices supports the new R 4.1 graphics features and returnsTRUEorFALSE.
grid.pattern_polygon_tiling()now supports the "elongated_triangular"type(#48). "geometry" patterns now support a "elongated_triangle"gridvalue.guess_has_R4.1_features()now returnsTRUEfor theragg::agg_png()andragg::agg_supertransparent()devices ifpackageVersion("ragg") >= '1.2.0'. It now also returnsTRUEfor thegrDevices::bmp(type = "cairo"),grDevices::cairo_ps(),grDevices::jpeg(type = "cairo"), andgrDevices::tiff(type = "cairo")devices ifgetRversion() >= '4.1.0'.
-
The package
{magick}has been downgraded from "Imports" to "Suggests" (#44). You'll need to manually install{magick}withinstall.packages("magick")in order to use the following "array" patterns:- "gradient" (but only if
use_R4.1_gradientsisFALSE) - "image"
- "magick"
- "placeholder"
- "plasma"
- "gradient" (but only if
-
The following package option
ggpattern_rescan now be set byoptions(). It controls default "raster" image pattern resolution (pixels per inch). Defaults to 72 (pixels per inch). -
grid.pattern_polygon_tiling()now supports the following additional polygon tilingtype's (#42):"rhombille"implements a rhombille tiling of rhombi (#37)"tetrakis_square"implements a tetrakis square tiling of isosceles right triangles (#38)"2*.2**.2*.2**"implements a polygon tiling made of rhombi."2**.3**.12*"implements a polygon tiling made of rhombi, triangles, and twelve-pointed stars."3.3.3.3**"implements a polygon tiling made of triangles."3.3*.3.3**"implements a regular (star) polygon tiling made of triangles and three-pointed stars."3.3.3.12*.3.3.12*"implements a regular (star) polygon tiling made of triangles and twelve-pointed starts."3.3.8*.3.4.3.8*"implements a regular (star) polygon tiling of triangles, squares, and eight-pointed stars."3.3.8*.4**.8*"implements a regular (star) polygon tiling made of triangles, four-pointed stars, and eight-pointed stars."3.4.6.3.12*"implements a regular (star) polygon tiling made of triangles, squares, hexagons, and twelve-pointed stars."3.4.8.3.8*"implements a regular (star) polygon tiling of triangles, squares, octagons, and eight-pointed stars."3.6*.6**"implements a regular (star) polygon tiling made of triangles and six-pointed stars."4.2*.4.2**"implements a polygon tiling made of squares and rhombi."4.4*.4**"implements a regular (star) polygon tiling made of squares and four-pointed stars."4.6.4*.6"implements a regular (star) polygon tiling made of squares, hexagons, and four-pointed stars."4.6*.4.6*.4.6*"implements a regular (star) polygon of squares and six-pointed stars."4.8*.4**.8*"implements a polygon tiling of squares and eight-pointed stars."6.6*.6.6*"implements a regular (star) polygon of hexagons and six-pointed stars."8.4*.8.4*"implements a regular (star) polygon of octagons and four-pointed stars."9.3.9.3*"implements a regular (star) polygon of triangles, nonagons, and three-pointed stars."12.3*.12.3*"implements a regular (star) polygon tiling made of dodecagons and three-pointed stars."12.12.4*"implements a regular (star) polygon tiling made of dodecagons and four-pointed stars."18.18.3*"implements a regular (star) polygon tiling made of eighteen-sided polygons and three-pointed stars.
-
grid.pattern_regular_polygon()now supports a"tetrakis_left"shapeand"tetrakis_right"shapewhich both draw an isosceles right triangle (one oriented left and one oriented right) as well as a"rhombille_rhombus"shape which draws a rhombus. These are non-regular polygons intended to help produce tetrakis square and rhombille polygon tilings.
star_angle()andstar_scale()now handle then_vertices == 2case (a "two-pointed star" polygon is a rhombus).- Fixes
grid.pattern_gradient()whenuse_R4.1_gradients=TRUEto better match behavior whenuse_R4.1_gradients=FALSE. - Now allows alpha values to be specified
within the
fill(andfill2) colour strings forgridpattern_plasma()andgridpattern_gradient()(whenuse_R4.1_gradients=FALSE). - In
pattern_square()for the "horizontal" and "vertical" types the value1Lis now guaranteed to be in the center of the pattern (#46).
- "array" patterns no longer set a minimum 12 pixel image width and/or height.
In particular, they can now have a zero pixel image width and/or height
(in which case the array pattern returns a
grid::nullGrob()). - "array" patterns no longer reduces the number of requested pixels when
legend = TRUE.
-
Supports the following new patterns:
- "rose" (curve)
grid.pattern_rose()(#43) - "text"
grid.pattern_text()(#40) - "wave"
grid.pattern_wave()which supports "sine" and "triangle"typewaves (#16)
- "rose" (curve)
-
names_patternis a new character vector of supported (builtin) patterns. -
clippingPathGrob()is a function that clips one grob according to clipping path set by a second grob.- If
use_R4.1_clippingisTRUEwe simply use the new R 4.1 clipping path feature - If
use_R4.1_clippingisFALSEwe generate agrid::rasterGrob()approximation - If
use_R4.1_clippingisNULLtry to guess an appropriate choice. - The default for
use_R4.1_clippingcan be set byoptions("ggpattern_use_R4.1_clipping")
- If
-
grid.pattern_gradient()now supports the argumentuse_R4.1_gradients- If
TRUEuse the new R 4.1 gradient feature - If
FALSEuse arasterGrobapproximation (old behaviour) - If
NULLtry to guess an appropriate choice. - The default for
use_R4.1_gradientscan be set byoptions("ggpattern_use_R4.1_gradients")
- If
-
The following package options can now be set by
options():ggpattern_use_R4.1_clippingIfTRUEuse the grid clipping path feature introduced in R v4.1.0. IfFALSEdo arasterGrobapproximation of the clipped pattern. Currently used byclippingPathGrob(),grid.pattern_rose(),grid.pattern_text(), and available for custom patterns.ggpattern_use_R4.1_featuresSet the default for all the otherggpattern_use_R4.1_*options arguments.ggpattern_use_R4.1_gradientsIfTRUEuse the grid gradient feature introduced in R v4.1.0. IfFALSEdo arasterGrobapproximation of the gradient pattern. Currently used bygrid.pattern_gradient()and available for custom patterns.ggpattern_use_R4.1_masksIfTRUEuse the grid mask feature introduced in R v4.1.0. Currently unused by this package but available for custom patterns.ggpattern_use_R4.1_patternsIfTRUEuse the grid pattern feature introduced in R v4.1.0. Currently unused by this package but available for custom patterns.
grid.pattern()now throws an error if there is a non-unique pattern name (set byoptions("ggpattern_geometry_funcs")and/oroptions("ggpattern_array_funcs")).- Fixes an error when catching a {magick} image reading error for some array patterns.
-
grid.pattern()draws a specified "pattern" to the active graphics device whilepatternGrob()returns a "pattern" (grid) grob. -
Supports the following original patterns:
- "pch"
grid.pattern_pch() - "polygon_tiling"
grid.pattern_polygon_tiling()(#13) - "regular_polygon"
grid.pattern_regular_polygon()(#20) - "weave"
grid.pattern_weave()(#12)
- "pch"
-
Supports the following patterns from ggpattern:
- "ambient"
grid.pattern_ambient() - "circle"
grid.pattern_circle()(#5) - "crosshatch"
grid.pattern_crosshatch()(#4) - "gradient"
grid.pattern_gradient()(#8) - "image"
grid.pattern_image()(#9) - "magick"
grid.pattern_magick()(#6) - "none"
grid::null() - "placeholder"
grid.pattern_placeholder()(#10) - "plasma"
grid.pattern_plasma()(#7) - "stripe"
grid.pattern_stripe()(#3) - Custom ggpattern geometry-based patterns (#1)
- Custom ggpattern array-based patterns (#2)
Enhancements made to the
{ggpattern}patterns provided by this package:-
Resolution of "array" patterns is now settable by new "pattern_res". Defaults to 72 pixels per inch but sets a minimum 12 pixel image width and/or height.
-
Default for "pattern_alpha" is now
NA_real_(preserve existing alpha transparency) instead of1(set to fully opaque). -
grid.pattern_ambient()pattern supports all arguments of the six{ambient}"noise" functions. -
grid.pattern_circle()has several enhancements:- Allows use of the argument
xoffsetandyoffset(#22) - Allows use of arguments
grid,type, andsubtypeto customize the pattern arrangement. - Use of multiple
fillcolors now produces a more attractive pattern. - Use of
densitygreater than1will now sometimes give an attractive result (#17). - Uses
{sf}to clip circles to boundary instead of{gridGeometry}
- Allows use of the argument
-
grid.pattern_crosshatch()allows using the argumentfill2to set different fill color(s) for the "over" crosshatch lines (#14). -
xoffset,yoffset, andspacingare now interpreted as "snpc" units andgrid.pattern_stripe()andgrid.pattern_crosshatch()now allow using the argumentgridto tweak placement of lines so that they now match the placement of circles fromgrid.pattern_circle()and polygons fromgrid.pattern_regular_polygon()(#24). -
The center point of the geometry "grid" now matches the center of the viewport.
- "ambient"
-
mean_col()is a utility function that computes an "average" color (#21) -
star_scale()andstar_angle()are utility functions for converting between regular star polygon parameterizations (#39). -
pattern_hex()returns an integer matrix indicating placement of multiple colors (or other graphical elements) on a hex grid. Supports types listed inhex_names. -
pattern_square()returns an integer matrix indicating placement of multiple colors (or other graphical elements) on a rectangular grid. Supports types listed insquare_names. -
pattern_weave()returns a logical matrix indicating where the warp lines should "up" for a specified weave pattern type and subtype. Supports weaves listed inweave_names. In particular supports "irregular matt" and "elongated twill" family of weave patterns including "zig-zag" and "herringbone" variations.