At first I tried to use geom_raster and geom_tile to create this background, but instead turned to using an image, as I thought it would be easier.
However, I cannot force the image to occupy the entire background so that the dots overlap on top of it correctly. The background image is here: http://imgur.com/a/eZGAP
It should look like this: 
But it looks like this: 
Here is a dput data:
structure(list(Industry.Group = c("Defense / Military", "Energy", "Financial Services", "Healthcare", "Manufacturing", "Public Sector (non-defense) / Not For Profit", "Retail", "Services", "Technology", "Telecommunications", "Transportation" ), ciq_tech = c(55.9, 53.7111111111111, 60.743661971831, 45.0620689655172, 42.1529411764706, 52.2444444444444, 40.8, 52.3263157894737, 50.9222222222222, 59.5111111111111, 39.6666666666667), Industry.Group = c("Defense / Military", "Energy", "Financial Services", "Healthcare", "Manufacturing", "Public Sector (non-defense) / Not For Profit", "Retail", "Services", "Technology", "Telecommunications", "Transportation"), ciq_org = c(39.6666666666667, 48.7413636363636, 48.0868442622951, 42.2482222222222, 39.0128260869565, 38.482, 39.7786956521739, 41.7248387096774, 47.8644262295082, 49.6739285714286, 41.4825)), .Names = c("Industry.Group", "ciq_tech", "Industry.Group", "ciq_org"), row.names = c(NA, -11L), class = "data.frame")
I tried this and set up the variables xmin , xmax and ymax and ymax :
library(png) library(grid) library(ggplot2) img <- readPNG("grid.png") g <- rasterGrob(img, interpolate=TRUE) ggplot(both, aes(x = ciq_org, y = ciq_tech)) + theme_bw() + annotation_custom(g, xmin=31, xmax=57, ymin=38, ymax=61) + geom_point()
As well as:
ggplot(both, aes(x = ciq_org, y = ciq_tech)) + theme_bw() + annotation_custom(g, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf) + geom_point()
I can also use geom_raster instead if it would be easier to recreate a background with fixed squares and colors initially in ggplot2.