2013-05-07 13 views
12

Sto provando a tracciare alcuni dati su un'immagine di sfondo. Il problema è che entrambi i livelli finiscono usando la stessa scala. Questo è purtroppo problematico.Stampa i dati sull'immagine di sfondo con ggplot

Un esempio.

Voglio tracciare alcuni dati su questo image.

sample image

destro. Quindi lo diagramma in ggplot in questo modo.

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 funziona bene. Quindi, aggiungiamo alcuni dati in cima.

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

Tracciare i dati di esempio, ho this. enter image description here

Quindi voglio solo che questo tracciato di dati sia sovrapposto all'immagine a gradiente.

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

ma finisce come this

enter image description here

Cercando di indicare una seconda bilancia di riempimento genera un errore. Vedo che lo this dice che non si può fare, ma spero che ci sia una soluzione alternativa o qualcosa che sto trascurando.

+0

[Questo] (http://kohske.wordpress.com/2010/12/26/use-image-for-background -in-ggplot2 /) post è vecchio e avrebbe bisogno di un aggiornamento per le versioni più recenti di ggplot, ma potrebbe almeno suggerire una via d'uscita. – joran

risposta

17

Prova questo, (o in alternativa 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

+0

Si noti che questo non funziona con 'coord_polar', ma si può trovare una soluzione per quel caso a questa domanda http://stackoverflow.com/questions/34496000/trying-to-add-an-image-to-a- polar-plot-dà-error-annotation-custom-solo-lavoro. – Deleet

Problemi correlati