Piuttosto che chiedere come tracciare set di dati di grandi dimensioni, voglio avvolgere plot
in modo che il codice che produce molti diagrammi non venga martellato quando è tracciare un grande oggetto Come posso avvolgere lo plot
con un modo molto semplice in modo che tutte le sue funzionalità siano preservate, ma i primi test per determinare se l'oggetto che viene passato è troppo grande?Wrapping La funzione di trama di R (o ggplot2) per evitare il tracciamento di set di dati di grandi dimensioni
Questo codice funziona per chiamate vanilla su plot
, ma manca la stessa generalità di plot
(vedere di seguito).
myPlot <- function(x, ...){
isBad <- any((length(x) > 10^6) || (object.size(x) > 8*10^6) || (nrow(x) > 10^6))
if(is.na(isBad)){isBad = FALSE}
if(isBad){
stop("No plots for you!")
}
return(plot(x, ...))
}
x = rnorm(1000)
x = rnorm(10^6 + 1)
myPlot(x)
Un esempio in cui questo non riesce:
x = rnorm(1000)
y = rnorm(1000)
plot(y ~ x)
myPlot(y ~ x)
C'è qualche modo semplice per avvolgere plot
per abilitare questa verifica dei dati da tracciati, pur passando attraverso tutti gli argomenti? Se no, allora che ne dici di ggplot2
? Sono un pari non-plotter. (Nei casi in cui il set di dati è grande, userò hexbin, sub-campionamento, trame di densità, ecc, ma non è il fuoco qui.)
Nota 1: Quando si testa idee, vi consiglio di prova per dimensioni> 100 (o imposta una variabile, ad esempio myThreshold <- 1000
), anziché contro una dimensione di> 1 M, altrimenti ci sarà molto dolore nel colpire il lento plottaggio. :)
+1 per la pubblicazione della risposta corretta. – Andrie
+1 Per informazioni dettagliate su cosa sta succedendo e per il molto utile puntatore al riferimento standard non standard. Puoi chiarire dove posso trovare il codice per 'plot.formula'? Suppongo che qualsiasi codice che estrae gli oggetti da una formula funzionerà, quindi lo sto anche cercando. – Iterator
@Iterator 'graphics ::: plot.formula' o' getAnywhere (plot.formula) 'mostrerà il codice. 'methods (plot)' mostrerà quali metodi S3 sono disponibili per il plot generico. Si noti che 'plot.formula' è mostrato con un' * 'nell'output da' methods() ', che indica che la funzione stessa non viene esportata dal namespace; invece è registrato come metodo S3 per la spedizione. –