/ / Comment tracer avec un png en arrière-plan? [dupliquer] - r, visualisation de données, données volumineuses

Comment tracer avec un png en arrière-plan? [dupliquer] - r, visualisation de données, données volumineuses

J'ai fait un complot avec 3 millions de points et l'ai enregistré en PNG. Cela a pris quelques heures et je voudrais éviter de reprendre tous les points.

entrer la description de l'image ici

Comment puis-je générer un nouveau tracé qui a ce PNG en arrière-plan?

Réponses:

79 pour la réponse № 1

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'intrigue.

entrer la description de l'image ici


15 pour la réponse № 2

Alors que la réponse de @ bill_080 répond directement à votre question, s’agit-il vraiment de ce que vous voulez? Si vous voulez tracer la carte, vous devrez aligner soigneusement vos systèmes de coordonnées. Voir par exemple Carte du crime de Houston comment cela peut être fait avec ggplot2.

Pour votre problème, il me semble qu’il pourrait exister 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

entrer la description de l'image ici

hexbin fonctionne directement avec lattice et ggplot2, mais les coordonnées centrales des bacs sont en binned@xcm et binned@ycmafin 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 parcelle d'origine:

> system.time (plot (binned@xcm, binned@ycm, pch = 20, cex=0.4))
User      System verstrichen
0.780       0.004       0.786

entrer la description de l'image ici

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

entrer la description de l'image ici