2011-08-22 13 views
29

Perché succede?plot.new non è stato ancora chiamato

plot(x,y) 
yx.lm <- lm(y ~ x) 
lines(x, predict(yx.lm), col="red") 

Errore nei plot.xy(xy.coords(x, y), type = type, ...): plot.new non è stato ancora

+1

lavora qui se applicato a due vettori brevi. Per favore mostraci 'str (x)' e 'str (y)'. – NPE

+3

Come ti aspetti che commentiamo con le specifiche? Non abbiamo 'x',' y', né il codice usato per adattarsi al modello lineare. Per favore aiutaci ad aiutarti. –

risposta

23

Alcuni azione denominato, molto probabilmente non rappresentato nel codice visibile, ha chiuso il dispositivo schermo interattivo. Potrebbe essere fatto con un "clic" su un pulsante di chiusura. (Potrebbe anche essere eseguito da un ulteriore dev.off() quando si esegue il plottaggio su un dispositivo di grafica di file. Ciò può accadere se si incolla in un comando di plottaggio a più righe che ha un dev, off() alla fine ma errori fuori all'apertura del dispositivo esterno ma poi ha hte dev.off() su una riga separata in modo da chiudere accidentalmente il dispositivo interattivo).

Alcune (la maggior parte?) Implementazioni R avvieranno automaticamente un dispositivo di grafica di schermo aperto, ma se lo si chiude, è necessario inizializzarlo di nuovo. Su Windows che potrebbe essere window(); su un Mac, quartz(); e su una casella Linux, x11(). Potrebbe anche essere necessario emettere un comando plot.new(). Seguo semplicemente gli ordini. Quando ottengo quell'errore, emetto plot.new() e, se non vedo una finestra di stampa, emetto anche quartz(). Ricomincio quindi dall'inizio con un nuovo comando plot(., ., ...) e ulteriori aggiunte a quell'immagine dello schermo di stampa.

+6

Questa risposta è simile al consiglio "if in doubt, reformat your hard drive". Non è necessario aggiungere chiamate plot.new() indesiderate. L'OP (ovviamente) ha lasciato fuori la sua chiamata lm() e molto probabilmente un'altra chiamata che chiude è la finestra di trama. plot.new() non "riattaccerà" al grafico esistente di x vs y, quindi la sua chiamata a lines() non verrebbe scritta su quella trama. –

+0

Se nel peggiore dei casi è innocuo, non è simile al tuo esempio e nemmeno simile a rm (list = ls()). –

+0

Non è sempre innocuo. E come ho fatto notare, plot (x, y); plot.new(); lines (...) * non * farà quello che l'OP voleva –

1

Ho avuto lo stesso problema ... il mio problema era che stavo chiudendo la finestra al quarzo dopo la trama (x, y). Una volta che l'ho tenuto aperto, le righe che in precedenza hanno provocato degli errori aggiungevano semplicemente delle cose alla mia trama (come avrebbero dovuto). Speriamo che questo possa aiutare alcune persone che arrivano a questa pagina.

1

Come novellino, ho affrontato lo stesso "problema".

In termini Novellino: quando si chiama plot(), la finestra del grafico ottiene la messa a fuoco e non si può entrare in ulteriori comandi R. Questo è quando si conclude che è necessario chiudere la finestra del grafico per tornare a R. Tuttavia, alcuni i comandi, come identify(), agiscono su finestre grafiche aperte/attive. Quando identify() non riesce a trovare una finestra di grafico aperta/attiva, fornisce questo messaggio di errore.

Tuttavia, è sufficiente fare clic sulla finestra R senza chiudere la finestra del grafico. Quindi è possibile digitare più comandi al prompt R, come identify() ecc

0

Se qualcuno sta usando print funzione (ad esempio, con mtext), quindi in primo luogo descrivere una trama nullo:

plot(0,type='n',axes=FALSE,ann=FALSE) 

e quindi stampare con newpage = F

print(data, newpage = F) 
5

nel mio caso, stavo cercando di chiamare plot(x, y) e lines(x, predict(yx.lm), col="red") in due blocchi separati in file di Rmarkdown. Ha funzionato senza problemi durante l'esecuzione di blocchi, ma il documento corrispondente non funzionava. Dopo che ho spostato tutte le chiamate di tracciamento all'interno di un blocco, il problema è stato risolto.

+2

Si ottiene anche l'errore se si tenta di eseguire le righe separatamente all'interno dello stesso blocco, anziché eseguire l'intera operazione. Immagino che chiami 'dev.off()' da qualche parte sotto il cofano? – Gabriel

0

L'errore plot.new() si verifica quando viene eseguita solo una parte della funzione.

Si prega di trovare l'allegato per un esempio per correggere l'errore Con errore ....Quando abline si correva senza plot() sopra enter image description here senza errori ... Quando entrambi trama e abline correvano insieme enter image description here

Problemi correlati