Erreur dans plot.new (): marges de la figure trop grandes dans R

111

Je suis nouveau dans R mais j'ai fait de nombreux graphiques de corrélation avec des ensembles de données plus petits. Cependant, lorsque j'essaie de tracer un grand ensemble de données (2 Go +), je peux très bien produire le tracé, mais la légende ne s'affiche pas. Aucun conseil? ou alternatives?

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)     

Erreur dans plot.new(): marges de la figure trop grandes

tmp <- round(leg,2)
axis(1,at=seq(0,1,length=length(leg)), labels=tmp,cex.axis=1)
Steve Hwang
la source
1
Vous devez nous fournir un exemple reproductible démontrant les maux que vous rencontrez. stackoverflow.com/questions/12765668/…
Roman Luštrik
J'ai essayé tout ce qui précède et rien n'a fonctionné. Cependant, de temps en temps (au moins pour un débutant comme moi), les données d'une matrice ou d'un data.frame peuvent avoir été forcées dans un type dont vous n'étiez pas au courant. Dans ce cas, utilisez "as.numeric" avant vos données pour vous assurer que ce n'est pas le problème.
pApaAPPApapapa

Réponses:

86

Je soupçonne que le problème est que la petite région de figure 2 créée par votre layout()appel n'est pas suffisamment grande pour contenir uniquement les marges par défaut, sans parler d'un tracé.

Avant la ligne à l'origine du problème, essayez:

par(mar = rep(2, 4))

puis tracez la deuxième image

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

Vous devrez jouer avec la taille des marges sur le par() appel que je montre pour bien faire les choses. Vous devrez peut-être également augmenter la taille de l'appareil réel sur lequel vous tracez.

Un dernier conseil, enregistrez les par()valeurs par défaut avant de les modifier, alors changez votre par()appel existant en:

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

puis à la fin du tracé, faites

par(op)
Gavin Simpson
la source
Ah, merci pour la clarification. Je manipulais la mise en page (matrice ()) à la place. Appréciez l'aide!
Steve Hwang
2
c'était le bon indice pour moi. J'ai dû augmenter la taille de l'image ou diminuer la résolution danspng(filename="myfile.png", res=150, width = 1000, height = 1000)
vanao veneri
146

Cette erreur peut se produire dans Rstudio simplement parce que votre volet "Tracés" est à peine trop petit. Essayez de zoomer sur "Fichiers, graphiques, packages, aide, visionneuse" et voyez si cela vous aide!

Steve Pitchers
la source
8
Cela a résolu mon problème! J'avais agrandi la fenêtre "Environnement", rétrécissant la fenêtre "Plots", etc. Je devais juste agrandir la fenêtre. Je vous remercie!
Rock Lee
D'accord, cela a également affecté mon RStudio, et le simple fait d'agrandir la fenêtre a aidé.
Kingz
Parfois, je me retrouve accidentellement avec un certain nombre de volets en raison de l'utilisation de par (). par(mfrow=c(1,1))peut vous réinitialiser à un volet.
Matt
1
c'était une erreur très étrange pour moi puisque je suis nouveau dans R. Je n'ai jamais eu de problèmes auparavant avec d'autres langues / IDE où la disposition IDE aura un impact sur mon code !!
Adarsha
Génial, cela a fonctionné pour moi aussi. Une telle erreur cependant!
Mohammad
70

Si vous recevez ce message dans RStudio, cliquez sur la figure «balai» «Effacer tous les tracés» dans l'onglet Tracés et essayez à nouveau plot ().

entrez la description de l'image ici

Tout comme
la source
1
C'est la meilleure réponse.
NewbieDave le
15
graphics.off()
rawr
J'aime cette réponse
O.rka
C'est vraiment la meilleure réponse. Merci.
merve bıçakçı
24

Cela se produit parfois dans RStudio. Pour le résoudre, vous pouvez essayer de tracer dans une fenêtre externe (Windows uniquement):

windows() ## create window to plot your file
## ... your plotting code here ...
dev.off() 
jobligado
la source
1
C'est une meilleure réponse que d'acheter un moniteur plus grand. Il existe également une commande x11 () qui devrait fonctionner sous Linux.
Ron Jensen - Nous sommes tous Monica
1
La réponse la plus appropriée jamais. Merci.
TeeKea
tout équivalent pour MacOSX?
TeYaP
J'ai essayé cette solution lorsque j'obtiens une Error in plot.new() : figure margins too largeerreur dans RStudio lors du dessin OLS-CUSUM, et cela a fonctionné miraculeusement. Merci beaucoup jobligado.
Erdogan CEVHER
19

J'ai eu cette erreur dans R Studio et j'ai simplement été corrigée en agrandissant la barre latérale en cliquant et en faisant glisser son bord de droite à gauche.

Janac Meena
la source
2
c'était le gagnant. Pourquoi est-ce même une chose?
colin
2
Aucune des autres solutions n'a fonctionné pour moi sauf celle-ci.
zsad512
1
Je ne sais pas comment ni pourquoi, mais c'était aussi la seule solution qui fonctionnait pour moi.
TheSciGuy
10

Vérifiez si votre objet est une liste ou un vecteur. Pour ce faire, tapez is.list(yourobject). Si tel est le cas, essayez de le renommer x<-unlist(yourobject). Cela en fera un vecteur que vous pourrez tracer.

Gina-Maria
la source
Cela l'a fait pour moi (en utilisant png()/ dev.off()dans Rstudio).
knowah
5

entrez la description de l'image ici

Zoomez simplement sur cette zone si vous utilisez RStudio.

vkalit
la source
3

J'ai trouvé cette erreur aujourd'hui. Au départ, j'essayais de le sortir dans un .jpegfichier de faible largeur et hauteur.

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

Plus tard, j'ai augmenté la largeur et la hauteur à:

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

L'erreur n'était pas là. :)

Vous pouvez également jouer avec la résolution, si la résolution est élevée, vous avez besoin de plus de largeur et de hauteur.

jaikamal
la source
2

J'ai lutté avec cette erreur pendant des semaines (en utilisant RStudio). J'ai essayé de déplacer la fenêtre de tracé de plus en plus petite, mais cela n'a pas toujours aidé. Lorsque j'ai déplacé (traîné) l'application sur mon plus grand moniteur, le problème a disparu! J'étais abasourdi ... tant d'heures perdues ... je savais que mon code était correct ...

Liz
la source
0

Le canevas RStudio Plots limite la largeur et la hauteur du tracé. Cependant, si vous créez votre tracé à partir d' un morceau de code Rmarkdown , cela fonctionne sans limitation de champ de canevas car la zone de traçage est définie en fonction de la taille du papier.

Par exemple:

    ```{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)
    ```
Suat Atan PhD
la source
0

J'ai trouvé la même erreur aujourd'hui. J'ai essayé le bouton "Effacer tous les tracés", mais cela me donnait la même erreur. Ensuite, cette astuce a fonctionné pour moi, essayez d'augmenter la zone de traçage en faisant glisser. Cela vous aidera à coup sûr.

Dhruv Panchal
la source
0

Je viens d'utiliser le Effacer tous les tracés, puis donnez à nouveau la commande de tracé et c'était utile

Nirmal Kumar
la source
1
Bienvenue à SO. Pouvez-vous expliquer pourquoi c'est la réponse.
Mike Poole
0

Si la marge est faible, il est toujours préférable de commencer avec un nouveau dispositif de traçage:

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

Vous n'obtiendrez jamais d'erreur de marge, sauf si vous tracez quelque chose de grand qui ne peut pas être adapté.

Neeraj
la source