Errore in plot.new (): margini della figura troppo grandi in R


111

Sono nuovo in R ma ho creato numerosi grafici di correlazione con set di dati più piccoli. Tuttavia, quando provo a tracciare un set di dati di grandi dimensioni (2 GB +), riesco a produrre il grafico senza problemi, ma la legenda non viene visualizzata. Qualche consiglio? o alternative?

library(gplots)
r.cor <- cor(r)
layout(matrix(c(1,1,1,1,1,1,1,1,2,2), 5, 2, byrow = TRUE))
par(oma=c(5,7,1,1))
cx <- rev(colorpanel(25,"yellow","black","blue"))
leg <- seq(min(r.cor,na.rm=T),max(r.cor,na.rm=T),length=10)
image(r.cor,main="Correlation plot Normal/Tumor data",axes=F,col=cx)
axis(1, at=seq(0,1,length=ncol(r.cor)), labels=dimnames(r.cor)[[2]], 
    cex.axis=0.9,las=2)
axis(2,at=seq(0,1,length=ncol(r.cor)), labels=dimnames(r.cor)[[2]],
     cex.axis=0.9,las=2)
image(as.matrix(leg),col=cx,axes=T)     

Errore in plot.new(): margini della figura troppo grandi

tmp <- round(leg,2)
axis(1,at=seq(0,1,length=length(leg)), labels=tmp,cex.axis=1)

1
Dovresti fornirci un esempio riproducibile che dimostri i mali che stai avendo. stackoverflow.com/questions/12765668/...
romana Lustrik

Ho provato tutto quanto sopra e niente ha funzionato. Tuttavia, una volta ogni tanto (almeno per un principiante come me), i dati in una matrice o in data.frame possono essere stati forzati in un tipo di cui non eri a conoscenza. In tal caso, usa "as.numeric" prima dei tuoi dati per assicurarti che non sia questo il problema.
pApaAPPApapapa

Risposte:


86

Sospetto che il problema sia che la piccola regione 2 creata dalla tua layout()chiamata non è sufficientemente grande da contenere solo i margini predefiniti, per non parlare di un grafico.

Prima della linea che causa il problema, prova:

par(mar = rep(2, 4))

quindi traccia la seconda immagine

image(as.matrix(leg),col=cx,axes=T)

Avrai bisogno di giocare con la dimensione dei margini sulla par()chiamata che mostro per farlo bene. Potrebbe anche essere necessario aumentare le dimensioni del dispositivo effettivo su cui si sta stampando.

Un ultimo consiglio, salva le par()impostazioni predefinite prima di modificarle, quindi modifica la par()chiamata esistente in:

op <- par(oma=c(5,7,1,1))

poi alla fine della trama fare

par(op)

Ah, grazie per il chiarimento. Invece stavo manipolando layout (matrix ()). Apprezzo l'aiuto!
Steve Hwang

2
questo era il suggerimento giusto per me. Ho dovuto aumentare la dimensione dell'immagine o diminuire la risoluzione inpng(filename="myfile.png", res=150, width = 1000, height = 1000)
vanao veneri

146

Questo errore può verificarsi in Rstudio semplicemente perché il riquadro "Plots" è appena troppo piccolo. Prova a ingrandire "File, grafici, pacchetti, guida, visualizzatore" e vedi se aiuta!


8
Questo ha risolto il mio problema! Avevo espanso la finestra "Ambiente", restringendo la finestra "Plots", ecc. Ho solo dovuto espandere la finestra. Grazie!
Rock Lee

D'accordo, questo ha influito anche sul mio RStudio e il solo ampliamento della finestra ha aiutato.
Kingz

A volte mi ritrovo accidentalmente con un numero di pannelli a causa dell'uso di par (). par(mfrow=c(1,1))può reimpostarti su un riquadro.
Matt

1
è stato un errore molto strano per me dato che sono nuovo di R. Non ho mai avuto problemi prima con nessun altro linguaggio / IDE in cui il layout IDE avrà un impatto sul mio codice !!
Adarsha,

Fantastico, anche questo ha funzionato per me. Un errore così strano però!
Mohammad

70

Se viene visualizzato questo messaggio in RStudio, fare clic sulla figura "manico di scopa" "Cancella tutti i grafici" nella scheda Grafici e provare di nuovo a plot () potrebbe funzionare.

inserisci qui la descrizione dell'immagine


1
Questa è la migliore risposta.
NewbieDave

15
graphics.off()
rawr

Mi piace questa risposta
O.rka

Questa è davvero la migliore risposta. Grazie.
merve bıçakçı

24

Questo a volte accade in RStudio. Per risolverlo puoi provare a tracciare su una finestra esterna (solo Windows):

windows() ## create window to plot your file
## ... your plotting code here ...
dev.off() 

1
Questa è una risposta migliore rispetto all'acquisto di un monitor più grande. C'è anche un comando x11 () che dovrebbe funzionare su Linux.
Ron Jensen - Siamo tutti Monica il

1
La risposta più appropriata in assoluto. Grazie.
TeeKea

qualsiasi equivalente per MacOSX?
TeYaP

Ho provato questa soluzione quando ricevo un Error in plot.new() : figure margins too largeerrore in RStudio durante il disegno di OLS-CUSUM e ha funzionato miracolosamente. Molte grazie jobligado.
Erdogan CEVHER

19

Ho ricevuto questo errore in R Studio ed è stato risolto semplicemente ingrandendo la barra laterale facendo clic e trascinando sul bordo da destra a sinistra.


2
questo è stato il vincitore. Perché anche questa è una cosa?
colin

2
Nessuna delle altre soluzioni ha funzionato per me tranne questa.
zsad512

1
Non so come o perché, ma anche questa è stata l'unica soluzione che ha funzionato per me.
TheSciGuy

10

Controlla se il tuo oggetto è un elenco o un vettore. Per fare ciò, digita is.list(yourobject). Se questo è vero, prova a rinominarlo x<-unlist(yourobject). Questo lo trasformerà in un vettore che puoi tracciare.


Questo lo ha fatto per me (usando png()/ dev.off()in Rstudio).
knowah


3

Ho trovato questo errore oggi. Inizialmente, stavo cercando di esportarlo in un .jpegfile con larghezza e altezza ridotte.

jpeg("method1_test.jpg", width=900, height=900, res=40)

Successivamente ho aumentato la larghezza e l'altezza a:

jpeg("method1_test.jpg", width=1900, height=1900, res=40)

L'errore non c'era. :)

Puoi anche giocare con la risoluzione, se la risoluzione è alta, hai bisogno di più larghezza e altezza.



2

Ho lottato con questo errore per settimane (usando RStudio). Ho provato a spostare la finestra della trama sempre più grande, ma non è stato sempre di aiuto. Quando ho spostato (trascinato) l'applicazione sul mio monitor più grande, il problema è scomparso! Ero sbalordito ... così tante ore sprecate ... sapevo che il mio codice era corretto ...


0

Il canvas di RStudio Plots limita la larghezza e l'altezza del grafico. Tuttavia, se si crea la trama da un blocco di codice Rmarkdown , funziona senza limitazioni del campo della tela perché l'area di stampa è impostata in base alle dimensioni del foglio.

Per esempio:

    ```{r}
#inside of code chunk in Rmarkdown
        grid <- par(mfrow=c(4, 5))
        plot(faithful, main="Faithful eruptions")
        plot(large.islands, main="Islands", ylab="Area")
        ...
        par(grid)
    ```

0

Oggi ho riscontrato lo stesso errore. Ho provato il pulsante "Cancella tutti i grafici", ma mi dava lo stesso errore. Quindi questo trucco ha funzionato per me, prova ad aumentare l'area della trama trascinando. Ti aiuterà di sicuro.


0

Ho appena usato Cancella tutti i grafici, quindi ho dato di nuovo il comando della trama ed è stato utile


1
Benvenuto in SO. Per favore, puoi spiegare perché questa è la risposta.
Mike Poole

0

Se il margine è basso, è sempre meglio iniziare con un nuovo dispositivo di stampa:

dev.new()
# plot()
# save your plot
dev.off()

Non riceverai mai un errore di margine, a meno che non tracci qualcosa di grande che non può essere sistemato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.