ggplot2: el trazado ráster no funciona como se esperaba cuando se configuran los valores alfa

Primer post aquí, espero estar observando la etiqueta del sitio web. No pude encontrar ni responder en el sitio y anteriormente publiqué esto en un grupo específico de ggplot2, pero todavía no hay soluciones.

Básicamente, estoy tratando de superponer dos rásteres usando ggplot2 y requiero que el superior sea semitransparente. Tengo un ráster de sombreado que se calcula a partir de un ráster de datos de elevación, y deseo superponer el ráster de elevación sobre el ráster de sombreado para que la trama resultante no se vea 'plana'. Puedes ver lo que quiero decir en el código R reproducible a continuación.

Al usar los gráficos base, puedo lograr el resultado deseado y he incluido un ejemplo en el código a continuación para aclarar lo que quiero decir, pero necesito hacer esto en ggplot2.

No puedo hacerlo funcionar en ggplot2. La combinación de los rásteres hace que los colores se vuelvan graciosos (puedo trazar cada uno por sí solo). ¿Alguien puede ayudarme o señalarme en la dirección correcta? Ejemplo de código autocontenido y reproducible incluido a continuación. (Perdón por la longitud, pero pensé mejor para ser claro).

#   Load relevant libraries
library(ggplot2)
library(raster)


#   Download sample raster data of Ghana from my Dropbox
oldwd <- getwd()
tmp <- tempdir()
setwd(tmp)
url1 <- "http://dl.dropbox.com/s/xp4xsrjn3vb5mn5/GHA_HS.asc"
url2 <- "http://dl.dropbox.com/s/gh7gzou9711n5q7/GHA_DEM.asc"
f1 <- file.path(tmp,"GHA_HS.asc")
f2 <- file.path(tmp,"GHA_DEM.asc")
download.file(url1,f1)  #File is ~ 5,655Kb
download.file(url2,f2)  #File is ~ 2,645Kb


#   Create rasters from downloaded files
hs <-  raster(f1)
dem <- raster(f2)


#   Plot with base graphics to show desired output
plot(hs,col=grey(1:100/100),legend=F)
plot(dem,col=rainbow(100),alpha=0.4,add=T,legend=F)


#   Convert rasters TO dataframes for plotting with ggplot
hdf <- rasterToPoints(hs); hdf <- data.frame(hdf)
colnames(hdf) <- c("X","Y","Hill")
ddf <- rasterToPoints(dem); ddf <- data.frame(ddf)
colnames(ddf) <- c("X","Y","DEM")


#   Create vectors for colour breaks
b.hs <- seq(min(hdf$Hill),max(hdf$Hill),length.out=100)
b.dem <- seq(min(ddf$DEM),max(ddf$DEM),length.out=100)


#   Plot DEM layer with ggplot()
p1 <- ggplot()+
    layer(geom="raster",data=ddf,mapping=aes(X,Y,fill=DEM))+
    scale_fill_gradientn(name="Altitude",colours = rainbow(100),breaks=b.dem)+
    scale_x_continuous(name=expression(paste("Longitude (",degree,")")),limits=c(-4,2),expand=c(0,0))+
    scale_y_continuous(name=expression(paste("Latitude (",degree,")")),limits=c(4,12),expand=c(0,0))+
    coord_equal()
print(p1)


#   Plot hillShade layer with ggplot()
p2 <- ggplot()+
    layer(geom="raster",data=hdf,mapping=aes(X,Y,fill=Hill))+
    scale_fill_gradientn(colours=grey(1:100/100),breaks=b.hs,guide="none")+
    scale_x_continuous(name=expression(paste("Longitude (",degree,")")),limits=c(-4,2),expand=c(0,0))+
    scale_y_continuous(name=expression(paste("Latitude (",degree,")")),limits=c(4,12),expand=c(0,0))+
    coord_equal()
print(p2)


#   Try to plot both together with transparency on the DEM layer
p3 <- ggplot(hdf)+
    geom_raster(aes(X,Y,fill=Hill))+
    scale_fill_gradientn(colours=grey(1:100/100),breaks=b.hs,guide="none")+
    scale_x_continuous(name=expression(paste("Longitude (",degree,")")),limits=c(-4,2),expand=c(0,0))+
    scale_y_continuous(name=expression(paste("Latitude (",degree,")")),limits=c(4,12),expand=c(0,0))+
    geom_raster(data=ddf,aes(X,Y,fill=DEM),alpha=I(0.4))+
    scale_fill_gradientn(name="Altitude",colours = rainbow(100),breaks=b.dem)+
    coord_equal()
 print(p3)


#   Cleanup downloaded files and return to previous wd
unlink(tmp,recursive=T)
setwd(oldwd)

Mis preguntas son las siguientes:

P1: ¿Cómo puedo hacer que las capas de p3 se vean como lo hacen cuando se trazan con gráficos de base en el ejemplo anterior?

P2: ¿Cómo puedo especificar de manera más sensata las escalas de color para no tener una leyenda ridícula en el RHS?

Respuestas a la pregunta(2)

Su respuesta a la pregunta