J’ai fait un tracé avec 3 millions de points et je l’ai enregistré en PNG. Cela a pris quelques heures et je voudrais éviter de re-dessiner tous les points.
Comment puis-je générer un nouveau tracé comportant ce PNG en 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")
Ci-dessous l'insortinggue.
Alors que la réponse de @ bill_080 répond directement à votre question, est-ce vraiment ce que vous voulez? Si vous voulez tracer sur cela, vous devrez aligner soigneusement 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 facile: le binning, c’est-à-dire la mise en évidence des histogrammes 2D.
> df <- data.frame (x = rnorm (1e6), y = rnorm (1e6)) > system.time (plot (df)) User System verssortingchen 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 verssortingchen 0.704 0.040 0.784
hexbin fonctionne directement avec lattice et ggplot2, mais les coordonnées centrales des binned@xcm
sont binned@xcm
et binned@ycm
, vous pouvez donc é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 verssortingchen 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))