How to color entire background in ggplot2 when using coord_fixed

This will do what you want:

p2 <- p1 + theme(
  plot.background=element_rect(fill="green", color="green")
) + coord_fixed()
grid:::grid.rect(gp=gpar(fill="green", col="green"))
ggplot2:::print.ggplot(p2, newpage=FALSE)

First, we set the border and fill to green, then we plot a grid rectangle in the same color to fill the viewport, and finally we plot with ggplot2:::print setting the newpage parameter to false so that it overplots on top of our grid rectangle:

enter image description here

Note that the problem isn't with ggplot, but it's just that you are plotting into a viewport that is the wrong size. If you pre-shape your viewport to the correct aspect ratio, you won't need to worry about setting the viewport contents to green first.


If you want to achieve this effect without relying on non-exported ggplot2 functions, you can also use ggdraw() from cowplot:

test_data <- data.frame(x=1:10)
test_data$y <- sqrt(test_data$x)
p1 <- ggplot(test_data) + geom_point(aes(x, y))
p2 <- p1 + theme(plot.background=element_rect(fill="green", color = NA)) + coord_fixed()

# note, don't load cowplot, since it may change your theme
cowplot::ggdraw(p2) + 
  theme(plot.background = element_rect(fill="green", color = NA))

enter image description here

The function ggdraw() wraps your plot into a new ggplot object that you can then draw onto or style as you wish.


There's a way to do this in ggplot by using a secret (undocumented, passed to device in ...) argument bg to ggsave().

library(ggplot2)

test_data <- data.frame(x = 1:10)
test_data$y <- sqrt(test_data$x)

p1 <- ggplot(test_data) + 
  geom_point(aes(x, y)) +
  theme(plot.background = element_rect(fill = "green", color = "green")) +
  coord_fixed()

ggsave("test.png", bg = "green", h = 5)

I came here originally because I was using geom_sf to plot maps which are by definition fixed to a ratio, and wanted to add a dark background. The bg argument also applies to gganimate::animate(), if you need to add a background color to a fixed ratio animation.

enter image description here

Tags:

R

Ggplot2