2011-03-11 8 views
37

Ich machte ein Grundstück mit 3 Millionen Punkten und speicherte es als PNG. Es hat ein paar Stunden gedauert und ich möchte vermeiden, alle Punkte neu zu zeichnen.Wie mit einem Png als Hintergrund plotten?

enter image description here

Wie kann ich einen neuen Plot erzeugen, die diese PNG als Hintergrund hat?

+2

Habe es nie benutzt, aber das Paket 'png' könnte das haben, wonach du suchst: http://cran.r-project.org/web/packages/png/png.pdf – Chase

+1

Es wäre gut, etwas t hinzuzufügen Transparenz zu Ihren Punkten, so dass Sie ihre Verteilung besser sehen können. Wie in einem Dichtediagramm. – Rodrigo

+1

Werfen Sie einen Blick auf http://stackoverflow.com/a/42611002/15485 –

Antwort

77

Versuchen Sie folgendes:

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

Unterhalb der Handlung ist.

enter image description here

15

Während @ bill_080 Antwort direkt Ihre Frage beantwortet, ist das wirklich, was Sie wollen? Wenn Sie das aufzeichnen möchten, müssen Sie Ihre Koordinatensysteme sorgfältig ausrichten. Siehe z.B. Houston Crime Map Wie das mit ggplot2 gemacht werden kann.

Für Ihr Problem scheint es mir, dass es eine einfachere Lösung geben kann: binning, d. H. 2d Histogramme zu beenden.

> 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 arbeitet direkt mit Gittern und ggplot2, aber die Mittelpunktkoordinaten der Behälter sind in [email protected] und [email protected], so dass Sie auch das Ergebnis in Basis Grafiken zeichnen könnten. Bei hohen Anzahl von Behältern, erhalten Sie eine schnelle Version des ursprünglichen Grundstück:

> 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

aber Sie können leicht die Farben haben die Kodierung der Dichte:

> plot ([email protected]cm, [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