If you are looking for a simple solution, the easiest way to do this is with an overlay plot with a custom background:
require(ggplot2); require(grid); require(png);
data(mtcars)
img <- readPNG(source = "so.png")
g <- rasterGrob(img, interpolate=TRUE)
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
annotation_custom(g, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf)
:
, , , , .