Plotar dados sobre imagem de fundo com ggplot

Eu estou tentando traçar alguns dados sobre uma imagem de fundo. O problema é que ambas as camadas acabam usando a mesma escala. Infelizmente, isso é problemático.

Um exemplo.

Eu quero traçar alguns dados sobre esta imagem .

imagem de amostra

Certo. Então eu placo em ggplot assim.

img <- readJPEG("image.jpg") image <- apply(img, 1:2, function(v) rgb(v[1], v[2], v[3])) image <- melt(image) ggplot(image, aes(row, -column, fill=fill)) + geom_tile() + scale_fill_identity() 

E isso funciona bem. Então, vamos adicionar alguns dados no topo.

 df <- data.frame(x=sample(1:64, 1000, replace=T), y=sample(1:64, 1000, replace=T)) ggplot(df, aes(x,y)) + stat_bin2d() 

Plotando os dados da amostra, eu entendo isso . insira a descrição da imagem aqui

Então, eu só quero esse gráfico de dados sobre a imagem gradiente.

 ggplot(image, aes(row, -column, fill=fill)) + geom_tile() + scale_fill_identity() + geom_point(data=df2, aes(x=x, y=-y)) 

Mas acaba assim

insira a descrição da imagem aqui

Tentar especificar uma segunda escala de preenchimento gera um erro. Vejo que isso não pode ser feito, mas espero que haja uma solução alternativa ou algo que eu esteja negligenciando.

Tente isso, (ou alternativamente annotation_raster)

 library(ggplot2) library(jpeg) library(grid) img <- readJPEG("image.jpg") df <- data.frame(x=sample(1:64, 1000, replace=T), y=sample(1:64, 1000, replace=T)) ggplot(df, aes(x,y)) + annotation_custom(rasterGrob(img, width=unit(1,"npc"), height=unit(1,"npc")), -Inf, Inf, -Inf, Inf) + stat_bin2d() + scale_x_continuous(expand=c(0,0)) + scale_y_continuous(expand=c(0,0)) 

captura de tela