2011-03-11 13 views
37

Ho creato una trama con 3 milioni di punti e l'ho salvata come PNG. Ci sono volute alcune ore e vorrei evitare di ridisegnare tutti i punti.Come stampare con un png come sfondo?

enter image description here

Come si genera una nuova trama che ha questa PNG come sfondo?

+2

Mai usato, ma il pacchetto 'png' potrebbe avere quello che stai cercando: http://cran.r-project.org/web/packages/png/png.pdf – Chase

+1

Sarebbe bene aggiungere un po 'di mancanza di trasparenza nei tuoi punti, quindi potresti vedere meglio la loro distribuzione. Come in una trama di densità. – Rodrigo

+1

Dai un'occhiata a http://stackoverflow.com/a/42611002/15485 –

risposta

77

Prova questa:

library(png) 

#Replace the directory and file information with your info 
ima <- readPNG("C:\\Documents and Settings\\Bill\\Data\\R\\Data\\Images\\sun.png") 

#Set up the plot area 
plot(1:2, type='n', main="Plotting Over an Image", xlab="x", ylab="y") 

#Get the plot information so the image will fill the plot box, and draw it 
lim <- par() 
rasterImage(ima, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4]) 
grid() 
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="white") 

Di seguito la trama.

enter image description here

15

Mentre @ di bill_080 risposta risponde direttamente alla tua domanda, è davvero questo quello che vuoi? Se vuoi tracciare questo, dovrai allineare attentamente i tuoi sistemi di coordinate. Vedi per es. Houston Crime Map come questo può essere fatto con ggplot2.

Per il tuo problema, mi sembra che ci possa essere una soluzione più semplice: binning, cioè cazzeggio istogrammi 2d.

> df <- data.frame (x = rnorm (1e6), y = rnorm (1e6)) 
> system.time (plot (df)) 
     User  System verstrichen 
    54.468  0.044  54.658 
> library (hexbin) 
> system.time (binned <- hexbin (df, xbins=200)) 
     User  System verstrichen 
     0.252  0.012  0.266 
> system.time (plot (binned)) 
     User  System verstrichen 
     0.704  0.040  0.784 

enter image description here

hexbin lavora direttamente con reticolo e ggplot2, ma coordina il centro di bidoni sono in [email protected] e [email protected], così si potrebbe anche tracciare il risultato nella grafica di base. Con alto numero di cassonetti, si ottiene una versione veloce della tua trama originale:

> system.time (plot ([email protected], [email protected], pch = 20, cex=0.4)) 
     User  System verstrichen 
     0.780  0.004  0.786 

enter image description here

ma si può facilmente avere i colori che codificano la densità:

> plot ([email protected], [email protected], pch = 20, cex=0.4, col = as.character (col)) 

> col <- cut ([email protected], 20) 
> levels (col) <- grey.colors (20, start=0.9, end = 0) 
> plot ([email protected], [email protected], pch = 20, cex=0.4, col = as.character (col)) 

enter image description here

Problemi correlati