Títulos multicolores con ggplot2 para R

Estaba tratando de implementar textos multicolores como se muestra aquí:

texto multicolor en la tabla

que hizo referencia a esto:

texto multicolor en R

Esto es lo que se me ocurrió (con la ayuda deaquí):

require(ggplot2)
require(grid)
png(file="multicolortitle.png",width=800,height=500)
qplot(x = hp,y = mpg,data = mtcars,color=factor(mtcars$cyl),size=2) +
  scale_colour_manual(values = c("red3","green3","blue3")) + 
  theme_bw() +
  opts(title = " \n ") +
  opts(legend.position = "none") 
spacing  <- 20
grid.text(0.5, unit(1,"npc") - unit(1,"line"), 
          label=paste("4 cylinder,",paste(rep(" ",spacing*2), collapse='')),
          gp=gpar(col="red3", fontsize=16,fontface="bold"))
grid.text(0.5, unit(1,"npc") - unit(1,"line"), 
          label=paste(paste(rep(" ",spacing), collapse=''),"6 cylinder,",
            paste(rep(" ",spacing), collapse='')),
          gp=gpar(col="green3", fontsize=16,fontface="bold"))
grid.text(0.5, unit(1,"npc") - unit(1,"line"), 
          label=paste(paste(rep(" ",spacing*2), collapse=''),"8 cylinder"),
          gp=gpar(col="blue3", fontsize=16,fontface="bold"))
grid.text(0.5, unit(1,"npc") - unit(2,"line"), 
          label=paste(paste(rep(" ",spacing*0), collapse=''),
            "- Horsepower versus Miles per Gallon"),
          gp=gpar(col="black", fontsize=16,fontface="bold"))
dev.off()

Aquí está el gráfico resultante:

Entonces, mi pregunta: ¿hay un método más elegante para usar para esto? Me gustaría poder usarggsave por ejemplo, y crear el espacio para esto es un proceso altamente manual, no adecuado para escenarios en los que necesito hacer automáticamente cientos de gráficos de esta naturaleza. Podría ver algunas funciones de escritura encima de esto, pero ¿tal vez hay una mejor manera de implementar los métodos utilizados con la función de trazado base?

Respuestas a la pregunta(2)

Su respuesta a la pregunta