Hacer una leyenda rectangular, con filas y columnas etiquetadas, en cuadrícula

Tengo un ggplot donde mapeo los factores tanto para el relleno como para el alfa, como esto:

set.seed(47)
the_data <- data.frame(value = rpois(6, lambda=20),
                       cat1 = rep(c("A", "B"), each = 3),
                       cat2 = rep(c("X", "Y", "Z"), 2))

ggplot(the_data, aes(y = value, x = cat2, alpha = cat1, fill = cat2)) +
    geom_bar(stat = "identity", position = "dodge") +
    scale_alpha_discrete(range = c(0.5, 1)) +
    theme_bw()

La gente para la que lo estoy produciendo no encuentra muy clara la leyenda del alfa. Creo que una buena alternativa sería algo como esto (que hackeé en gráficos base):

Sé que no puedo generar una leyenda como esa con los comandos ggplot de alto nivel, pero puedo hacerlo engrid ¿Y ponerlo encima de mi trama?

Respuestas a la pregunta(2)

Su respuesta a la pregunta