as.grob for tmap object, defined in the
‘tmap’ package (2025-09-20, Sat)aes_ with aes (2025-09-20,
Sat)oncoplot object in ‘aplot’ and ‘aplotExtra’
(2023-07-18, Tue)gglist object (2023-06-26, Mon)bbplot object (2021-09-02, Thu)yulab.utils (2021-08-20, Fri)... parameter in as.ggplot (2021-08-06,
Fri)envir to base2grob
(2021-08-04, Wed, #11)patchwork object supported (2021-05-11, Tue)aplot object supported (2020-03-27, Fri)
as.ggplot (2020-03-16, Mon)hjust and vjust parameters in
as.ggplot (2020-03-11, Wed)grid2grob for all plot generated by grid
(2019-08-21, Wed)
as.grob method for Heatmap object (defined
in ComplexHeatmap package) (2019-08-06, Tue)as.grob method for eulergram object
(defined in eulerr package) (2019-05-09, Thu)
as.grob method for pheatmap object
(2018-08-03, Fri)
magick-image to grob
and ggplot object. (2018-04-25, Wed)as.grob as S3 Generics.as.grob by combining ggimage::toGrob and
base2grob package which was deprecated
as.grob can convert base plot or grid plot (e.g. vcd,
UpSetR packages) to grob objectas.ggplot supports all as.grob-supported
plots.I figured out a way to embed base plot (vennpie) to grid
plot (upset) when developing upsetplot
function in ChIPseeker package for visualizing overlap of
ChIPseq data in 2015, http://guangchuangyu.github.io/2015/07/upsetplot-in-chipseeker/.
I developed a subview function in ggtree
package in 2015, for embeding subplots, https://github.com/YuLab-SMU/ggtree/commit/2ab2876d5e92454869c3307ea6f3c8e2656630ef.
This function was re-implemented as geom_subview and
packed in the ggimage package.
In the early of 2017, I started to develop R script to produce
ggtree sticker. @lgatto first came out
with an idea of makeing an R package for producing hex sticker by
packing my script into a function, https://github.com/Bioconductor/BiocStickers/issues/12.
I have several ideas to improve the package, including producing
print-ready figure, employing modular design and supporting grammar of
graphics, as well as supporting subplot generated by base and lattice. I
started to develop the hexSticker package, https://github.com/GuangchuangYu/hexSticker/issues/2,
with base plot, lattice, ggplot2 and image file supported as subplot,
which was actually implemented in ggimage
(toGrob function, image file are supported by
geom_image).
I wrote a blog post, http://guangchuangyu.github.io/cn/2018/03/five-questions-of-meme/,
to ask questions based on the meme package to help users
understand ggplot2.
After I wrote the sentence:
if you know how
ggsaveworks, you can even extend it to support base plot
I started to extend ggsave to support base plot by using
formula or expression, e.g.
ggsave(~base_plot).
After that, I asked myself, why not extending cowplot to
support base plot with the fact that I already have source code to
convert base plot to grob object
(ggimage:::toGrob). Then I developed the
base2grob package and submit it to CRAN.
I wrote a blog post,
http://guangchuangyu.github.io/cn/2018/04/ggvenn/, to introduce
ggvenn function (in yyplot package, only
available on GitHub), and started to play with the UpSetR
package. I believe upset plot contains too much empty space
and can embed a venn plot as I did in 2015 with
vennpie. I created a PR, https://github.com/hms-dbmi/UpSetR/pull/112, to make it
possible to capture upset output and be able to be
converted to grob object. I thought it would be more easy
if I further convert the object to ggplot then I can
directly use ggimage::geom_subview() to embed
ggvenn inside upset plot. With this idea, I
started to implement as.ggplot function.
Then, I suddenly realized that I should packed
as.ggplot, ggimage:::toGrob and
base2grob into a single package. That’s why we have
ggplotify, which contains as.grob to convert
plots to grob and as.ggplot to convert plots
to ggplot objects.