Подтвердить что ты не робот

Данные графика над фоновым изображением с помощью ggplot

Я пытаюсь построить некоторые данные поверх фонового изображения. Проблема в том, что оба слоя заканчиваются тем же масштабом. Это, к сожалению, проблематично.

Пример.

Я хочу построить некоторые данные над этим image.

sample image

Right. Поэтому я рисую его в ggplot так.

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

И это работает хорошо. Итак, добавьте некоторые данные сверху.

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

Запланируя данные образца, я получаю this. enter image description here

Итак, я просто хочу, чтобы этот график данных накладывался над градиентным изображением.

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

Но это заканчивается как this

enter image description here

Попытка указать вторую заполняющую шкалу порождает ошибку. Я вижу, что это говорит, что этого не может быть сделано, но я надеюсь, что есть обходной путь или что-то, что я пропускаю.

4b9b3361

Ответ 1

Попробуйте это (или, альтернативно, 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)) 

screenshot