J'ai fait un tracé avec 3 millions de points et l'ai enregistré au format PNG. Cela a pris quelques heures et je voudrais éviter de redessiner tous les points.
Comment puis-je générer un nouveau tracé qui a ce PNG comme arrière-plan?
Essaye ça:
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")
Voici l'intrigue.
Alors que la réponse de @ bill_080 répond directement à votre question, est-ce vraiment ce que vous voulez? Si vous voulez tracer là-dessus, vous devrez soigneusement aligner vos systèmes de coordonnées. Voir par exemple Houston Crime Map comment cela peut être fait avec ggplot2.
Pour votre problème, il me semble qu'il peut y avoir une solution plus simple: le binning, c'est-à-dire la création d'histogrammes 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
hexbin fonctionne directement avec lattice et ggplot2, mais les coordonnées centrales des casiers sont en binned@xcm
et binned@ycm
, afin que vous puissiez également tracer le résultat dans les graphiques de base. Avec un nombre élevé de bacs, vous obtenez une version rapide de votre tracé d'origine:
> system.time (plot (binned@xcm, binned@ycm, pch = 20, cex=0.4))
User System verstrichen
0.780 0.004 0.786
mais vous pouvez facilement avoir les couleurs codant la densité:
> plot (binned@xcm, binned@ycm, pch = 20, cex=0.4, col = as.character (col))
> col <- cut (binned@count, 20)
> levels (col) <- grey.colors (20, start=0.9, end = 0)
> plot (binned@xcm, binned@ycm, pch = 20, cex=0.4, col = as.character (col))