Package ‘gginnards’ (Explore the innards of ‘ggplot2’) is a set of extensions to R package ‘ggplot2’. Two geometries and two statistics are specially useful when learning how to write ‘ggplot2’ extensions and when debugging newly defined statistics and geometries.
Objects of class "gg"
, or unrendered ggplot objects, are
a list-like structure containing data and “instructions” to construct a
plot and its layers. By editing this structure it is possible to modify
the plot that will be rendered. Functions are provided for the
manipulation of layers within gg
objects. These can be
useful in the case extensions to ‘ggplot2’ that define functions that
construct and return whole gg
objects. In such cases in can
be useful to programatically edit these gg
objects to
insert plot layers or change their order.
As the variables returned in data
by many statistics
depend on input, some of these tools can be also useful in everyday
plotting with ‘gplot2’ as a way of diagnosing problems or getting
information that is missing from their documentation or only available
at runtime.
Because of its nature, this package does not always play safe and nice even if it tries to. No exported or internal function or object should be imported or used in other packages, simply because they may change at any time (as in version 0.2.0). Although I intend to maintain the package, I will not attempt to actively keep it compatible with anything but the current version of ‘ggplot2’, although it will frequently also work with some earlier versions. Please, see the blog post Playing on the same team as your dependecy by Thomas Lin Pedersen.
The debug statistics and geoms are defined in ‘gginnards’ using the
same approach as other ‘ggplot2’ extensions, without any significant
assumptions about the internals of ‘ggplot2’. Thus, they are unlikely to
be affected by minor updates to ‘ggplot2’. The layer manipulation
functions rely on the internal structure of "gg"
objects,
but mostly on aspects unlikely to change frequently.
Package ‘gginnards’ does not provide a deep view into the structure
of "gg"
objects or the steps involved in building these
objects and rendering them into graphical objects. Package ‘ggtrace’ by June Choe
provides tools for a much deeper and detailed exploration and edition of
ggplots, but it is much more dependent on the undocumented internals of
‘ggplot2’ than ‘gginnards’. (Note: there exists another package named ggtrace for a different
purpose. None of them are yet available through CRAN.)
This package was born when several functions were extracted from package ‘ggpmisc’ and packaged on their own.
Geometries geom_debug_panel()
and
geom_debug_droup()
by default print the data
object received as input by the draw functi to the console adding a plot
layer that produces no graphic output. As they take as arguments summary
functions, they allows flexibility in how data
objects are
displayed. geom_debug_panel()
and
geom_debug_droup()
are useful at any time when one needs to
check what variables are returned by statistics. Many statistics are
well documented and always return the same variables. For other
statistics even if well documented the returned variables in
data
vary depending on grouping and/or the arguments passed
to them, in which case this geometry can also be useful when debugging
scripts.
Statistics stat_debug_panel()
and
stat_debug_droup()
echo their data input to the R console
aim at easing debugging during development of new geoms and statistics.
They will also help those learning how ggplot grouping, panels and
layers work. As the debug geometries, they take as arguments
summary functions allowing flexibility in how data
objects
are displayed.
For debugging, the value returned by these stats is usually not
interesting, and by default, it is a copy of the data
object received as input. This can be changed by passing a function as
argument to fun.data
. This could be useful to produce data
summaries to be plotted as a layer. This may even work as a tool useful
to build ad-hoc statistics with rudimentary built-in debugging.
A set of functions easy the manipulation of layers in ggplot objects, allowing deletion of any existing layer, insertion of new layers at any position, and reordering of the existing layers.
A function to drop unused variables from the data object embedded in
gg
and ggplot
objects serves as an additional
example of a manipulation that may be useful when dealing with very
large datasets. Companion functions are defined to explore the embedded
data
object.
library(gginnards)
#> Loading required package: ggplot2
We print to the R console data
as seen as input
by geometries and statistics.
ggplot(mtcars, aes(cyl, mpg, color = mpg)) +
geom_point() +
geom_debug_panel()
#> [1] "PANEL 1; group(s) -1; 'draw_panel()' input 'data' (head):"
#> colour x y PANEL group
#> 1 #30648F 6 21.0 1 -1
#> 2 #30648F 6 21.0 1 -1
#> 3 #356E9D 4 22.8 1 -1
#> 4 #316692 6 21.4 1 -1
#> 5 #29577E 8 18.7 1 -1
#> 6 #275379 6 18.1 1 -1
#> [1] "PANEL 1; group(s) -1; 'draw_panel()' input 'params' (summary):"
#> Length Class Mode
#> x 11 ViewScale environment
#> x.sec 11 ViewScale environment
#> x.range 2 -none- numeric
#> y 11 ViewScale environment
#> y.sec 11 ViewScale environment
#> y.range 2 -none- numeric
#> guides 4 Guides environment
We print to the R console colnames(data)
.
ggplot(mtcars, aes(cyl, mpg, color = mpg)) +
geom_point() +
geom_debug_panel(dbgfun.data = colnames, dbgfun.params = NULL)
#> [1] "PANEL 1; group(s) -1; 'draw_panel()' input 'data' (anonymous function):"
#> [1] "colour" "x" "y" "PANEL" "group"
We print to the R console data
as returned by
stat_summary()
and seen as input by
geometries.
ggplot(mtcars, aes(cyl, mpg, colour = factor(cyl))) +
stat_summary(fun.data = "mean_cl_boot") +
stat_summary(fun.data = "mean_cl_boot", geom = "debug_panel")
#> [1] "PANEL 1; group(s) 1, 2, 3; 'draw_function()' input 'data' (head):"
#> colour x group y ymin ymax PANEL flipped_aes orientation
#> 1 #F8766D 4 1 26.66364 24.15364 29.11955 1 FALSE NA
#> 2 #00BA38 6 2 19.74286 18.78571 20.72893 1 FALSE NA
#> 3 #619CFF 8 3 15.10000 13.79250 16.32143 1 FALSE NA
We print to the R console data
as seen as input
by statistics that use a panel function.
ggplot(mtcars, aes(cyl, mpg, colour = factor(cyl))) +
stat_debug_panel()
#> [1] "PANEL 1; group(s) 1, 2, 3; 'compute_panel()' input 'data' (head):"
#> x y colour PANEL group
#> 1 6 21.0 6 1 2
#> 2 6 21.0 6 1 2
#> 3 4 22.8 4 1 1
#> 4 6 21.4 6 1 2
#> 5 8 18.7 8 1 3
#> 6 6 18.1 6 1 2
We build object p
of class gg
(a ggplot).
We query the number of layers and the position of layers by the class of
the ggproto
object.
<-
p ggplot(mtcars, aes(cyl, mpg)) +
geom_point(size = 3) +
stat_summary(fun.data = "mean_cl_boot", color = "red", size = 2)
num_layers(p)
#> [1] 2
which_layers(p, "GeomPoint")
#> geom_point
#> 1
which_layers(p, "StatSummary")
#> stat_summary
#> 2
p
move_layers(p, "GeomPoint", position = "top")
Installation of the most recent stable version from CRAN (sources, Mac and Win binaries):
install.packages("gginnards")
Installation of the current unstable version from R-Universe CRAN-like repository (binaries for Mac, Win, Webassembly, and Linux, as well as sources available):
install.packages('gginnards',
repos = c('https://aphalo.r-universe.dev',
'https://cloud.r-project.org'))
Installation of the current unstable version from GitHub (from sources):
# install.packages("devtools")
::install_github("aphalo/gginnards") devtools
HTML documentation is available at (https://docs.r4photobiology.info/gginnards/), including two vignettes.
News about updates are regularly posted at (https://www.r4photobiology.info/).
Please report bugs and request new features at (https://github.com/aphalo/gginnards/issues). Pull requests are welcome at (https://github.com/aphalo/gginnards).
If you use this package to produce scientific or commercial publications, please cite according to:
citation("gginnards")
#> To cite package 'gginnards' in publications use:
#>
#> Aphalo P (2024). _gginnards: Explore the Innards of 'ggplot2'
#> Objects_. R package version 0.2.0,
#> <https://CRAN.R-project.org/package=gginnards>.
#>
#> A BibTeX entry for LaTeX users is
#>
#> @Manual{,
#> title = {gginnards: Explore the Innards of 'ggplot2' Objects},
#> author = {Pedro J. Aphalo},
#> year = {2024},
#> note = {R package version 0.2.0},
#> url = {https://CRAN.R-project.org/package=gginnards},
#> }
© 2016-2024 Pedro J. Aphalo (pedro.aphalo@helsinki.fi). Released under the GPL, version 2 or greater. This software carries no warranty of any kind.