I'm trying to utilize the method outlined here to add a logo to a plot, but in a loop. It works fine for one plot, but in a loop it doesn't print as expected. Note that the first R logo is placed prior to anything else, and then is dropped from the last plot.
I'm utilizing it in quarto to put out as a html document, though I don't think that should matter with the code.
---
title: "Logo Plot Question"
format:
html:
page-layout: full
editor: source
execute:
echo: false
warning: false
editor_options:
chunk_output_type: console
---
```{r}
# Load ggplot2
library(ggplot2)
library(grid)
library(magick)
# # Create data
data <- data.frame(
name=c("A","B","C","D","E") ,
value=c(25,49,36,18,45)
)
logo <- magick::image_read("https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/R_logo.svg/1448px-R_logo.svg.png")
for (i in 1:2){
print("Start plot")
p <- ggplot(data, aes(name, value)) +
geom_bar(stat = "identity", width = 1, aes(fill = value)) +
coord_polar(clip = "off") +
scale_y_continuous(limits = c(-10, 50)) +
theme_void() +
theme(legend.position = "none") +
labs(title = paste0("Plot ", i))
grid::grid.raster(logo, x = 0.5, y = 0.5,
just = c('center', 'top'),
width = unit(0.5, 'inches'))
print(p)
# Does not work...
# p2 <- grid::grid.raster(logo, x = 0.5, y = 0.5,
# just = c('center', 'top'),
# width = unit(0.5, 'inches'))
#
# print(p2)
print("End plot")
}
```
Note: I've seen solutions that suggest using ggsave() to save as an image and then reimport in. I would like to shy away from this as I am creating a report and don't want hundreds of images sitting around.

I like to keep ggplot objects as ggplot objects. The linked article draws over an existing
ggplot.I would probably use a custom annotation in most cases, but this doesn't work with polar co-ordinates, so I would instead make a logo-only ggplot that I could add to any plot using the
inset_elementfunction from thepatchworkpackage.Now the Quarto output is: