Títulos multicoloridos com ggplot2 para R

Eu estava tentando implementar textos multicoloridos como mostrado aqui:

texto multicolorido no gráfico

que referencia isto:

texto multicolorido em R

Foi isso que eu criei (com a ajuda deAqui):

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()

Aqui está o gráfico resultante:

Então, minha pergunta: existe um método mais elegante para usar isso? Eu gostaria de poder usarggsave por exemplo, e criar o espaçamento para isso é um processo altamente manual - não é adequado para cenários em que preciso fazer centenas de parcelas dessa natureza automaticamente. Eu pude ver escrevendo algumas funções em cima disso, mas talvez haja uma maneira melhor de implementar os métodos utilizados com a função de plotagem de base?

questionAnswers(2)

yourAnswerToTheQuestion