I am trying to create a ggplot png file with a transparent background. When I used ggplot objects directly with panel.background=element_rect(fill = "transparent",colour = NA) , I got the results that I wanted.
Now I'm trying to make some changes to the plot (adding labels to such graphs. How to add a common label to faces in ggplot2? )
Instead of getting a transparent background, when I draw a modified gtable object, the background is light gray with thin white lines.

If I draw a ggplot object directly, it supports transparency

Here is the code I'm using:
data <- data.table(a = seq(1,5), b=sample.int(5,50,replace=TRUE), c=rnorm(100)) plotSlices <- function(input, rowfacet, colfacet, metric, label, facetlabels=FALSE){ calc <- substitute(metric) bygroup<-c(rowfacet,colfacet) aggregates <- input[,eval(calc),by=bygroup] chart <- ggplot(aggregates) + geom_bar(stat="identity") + aes(x="", y=V1, fill=V1>0) + facet_grid(as.formula(sprintf("%s ~ %s", rowfacet, colfacet))) + coord_flip() + xlab("") + ylab(label) + theme(legend.position = "none", axis.title=element_text(size=16, color="white"), axis.ticks.y=element_blank(), panel.grid.major.y=element_blank(), panel.grid.major.y=element_line(colour = "grey25"), panel.grid.minor.x=element_blank(), plot.background=element_rect(fill = "transparent",colour = NA), panel.background=element_rect(fill = "transparent",colour = NA) ) if (facetlabels) { return(LabelFacets(chart, rowfacet, colfacet)) } else { return(chart) } } LabelFacets <- function(plot, rowfacet, colfacet) { grob <- ggplotGrob(plot) grob <- gtable_add_cols(grob, grob$widths[[7]]) grob <- gtable_add_grob(grob, list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))), textGrob(rowfacet, rot = -90, gp = gpar(col = gray(1)))), 4, 14, 12, name = paste(runif(2))) grob <- gtable_add_rows(grob, grob$widths[[2]], 2) grob <- gtable_add_grob(grob, list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))), textGrob(colfacet, gp = gpar(col = gray(1)))), 3, 4, 3, 12, name = paste(runif(2))) return(grob) } png(filename = "test.png", bg = "transparent") plot(plotSlices(data, "a", "b", mean(c), "Label", FALSE)) dev.off() png(filename = "test2.png", bg = "transparent") plot(plotSlices(data, "a", "b", mean(c), "Label", TRUE)) dev.off()