Erro em plot.new (): margens da figura muito grandes em R


111

Sou novo no R, mas fiz vários gráficos de correlação com conjuntos de dados menores. No entanto, quando tento plotar um grande conjunto de dados (2gb +), posso produzir o gráfico perfeitamente, mas a legenda não aparece. Algum conselho? ou alternativas?

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)     

Erro em plot.new() : margens da figura muito grandes

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

1
Você deve nos fornecer um exemplo reproduzível demonstrando os males que está tendo. stackoverflow.com/questions/12765668/…
— Roman Luštrik,

Tentei todas as opções acima e nada funcionou. No entanto, de vez em quando (pelo menos para um novato como eu), os dados em uma matriz ou data.frame podem ter sido forçados a algum tipo que você não conhecia. Nesse caso, use "as.numeric" antes de seus dados para ter certeza de que este não é o problema.
— pApaAPPApapapa

Respostas:


86

Suspeito que o problema é que a região 2 de pequena figura criada por sua layout()chamada não é grande o suficiente para conter apenas as margens padrão, quanto mais um gráfico.

Antes da linha que está causando o problema tente:

par(mar = rep(2, 4))

então plote a segunda imagem

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

Você precisará brincar com o tamanho das margens no par() ligação que apresento para fazer isso direito. Você também pode precisar aumentar o tamanho do dispositivo real no qual está plotando.

Uma dica final, salve os par()padrões antes de alterá-los, então altere sua par()chamada existente para:

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

então, no final da plotagem, faça

par(op)

Ah, obrigado pelo esclarecimento. Em vez disso, estava manipulando o layout (matrix ()). Agradeço a ajuda!
— Steve Hwang,

2
esta foi a dica certa para mim. Tive que aumentar o tamanho da imagem ou diminuir a resolução empng(filename="myfile.png", res=150, width = 1000, height = 1000)
— vanao veneri

146

Este erro pode ocorrer no Rstudio simplesmente porque o painel "Plots" é um pouco pequeno demais. Tente ampliar seus "Arquivos, Plots, Packages, Help, Viewer" e veja se isso ajuda!


8
Isso resolveu meu problema! Eu havia expandido a janela "Ambiente", diminuindo a janela "Plots", etc. Eu só tive que expandir a janela. Obrigado!
— Rock Lee

Concordo, isso afetou meu RStudio também, e apenas expandir a janela ajudou.
— Kingz

Às vezes, acidentalmente acabo com vários painéis devido ao uso de par (). par(mfrow=c(1,1))pode redefinir você para um painel.
— Matt

1
foi um erro muito estranho para mim, já que sou novo em R. Nunca tive problemas antes com qualquer outra linguagem / IDE onde o layout do IDE afetará meu código !!
— Adarsha

Incrível, isso funcionou para mim também. Um erro tão estranho!
— Mohammad

70

Se você receber esta mensagem no RStudio, clicar na figura 'cabo de vassoura' "Clear All Plots" na guia Plots e tentar plot () novamente pode funcionar.

insira a descrição da imagem aqui


1
Esta é a melhor resposta.
— NewbieDave

15
graphics.off()
— rawr

Gosto desta resposta
— O.rka,

Esta é realmente a melhor resposta. Obrigado.
— merve bıçakçı

24

Isso às vezes acontece no RStudio. Para resolver isso, você pode tentar plotar para uma janela externa (somente Windows):

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

1
Esta é uma resposta melhor do que comprar um monitor maior. Também existe um comando x11 () que deve funcionar no Linux.
— Ron Jensen - Somos todos Monica

1
A resposta mais apropriada de todas. Obrigado.
— TeeKea

qualquer equivalente para MacOSX?
— TeYaP

Tentei esta solução quando recebo um Error in plot.new() : figure margins too largeerro no RStudio ao desenhar o OLS-CUSUM, e funcionou milagrosamente. Muito obrigado jobligado.
— Erdogan CEVHER

19

Eu obtive esse erro no R Studio, e foi corrigido simplesmente aumentando a barra lateral clicando e arrastando em sua borda da direita para a esquerda.


2
este foi o vencedor. Por que isso é mesmo uma coisa?
— colin

2
Nenhuma das outras soluções funcionou para mim, exceto esta.
— zsad512

1
Não sei como ou por quê, mas essa também foi a única solução que funcionou para mim.
— TheSciGuy

10

Verifique se o seu objeto é uma lista ou um vetor. Para fazer isso, digite is.list(yourobject). Se isso for verdade, tente renomeá-lo x<-unlist(yourobject). Isso o tornará um vetor que você pode plotar.


Isso fez isso para mim (usando png()/ dev.off()no Rstudio).
— knowah

5

insira a descrição da imagem aqui

Apenas amplie esta área se você usar o RStudio.


3

Eu encontrei esse erro hoje. Inicialmente, eu estava tentando gerar um .jpegarquivo com largura e altura baixas.

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

Mais tarde, aumentei a largura e a altura para:

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

O erro não estava lá. :)

Você também pode brincar com a resolução, se a resolução for alta, você precisa de mais largura e altura.



2

Lutei com esse erro por semanas (usando RStudio). Tentei mover a janela do gráfico para cima e para baixo, mas isso não ajudou de forma consistente. Quando movi (arrastei) o aplicativo para o meu monitor maior, o problema desapareceu! Fiquei surpreso ... tantas horas perdidas ... Eu sabia que meu código estava correto ...


0

A tela RStudio Plots está limitando a largura e as alturas da plotagem. No entanto, se você fizer sua plotagem a partir do fragmento de código Rmarkdown , ela funcionará sem limitação de campo de tela porque a área de plotagem é definida de acordo com o tamanho do papel.

Por exemplo:

    ```{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

Eu encontrei o mesmo erro hoje. Eu tentei o botão "Limpar todos os gráficos", mas estava dando o mesmo erro. Então este truque funcionou para mim, tente aumentar a área do gráfico arrastando. Isso vai te ajudar com certeza.


0

Acabei de usar Limpar todos os gráficos e, novamente, dar o comando de gráfico e foi útil


1
Bem-vindo ao SO. Por favor, você pode explicar por que essa é a resposta.
— Mike Poole

0

Se a margem for baixa, é sempre melhor começar com um novo dispositivo de plotagem:

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

Você nunca obterá erro de margem, a menos que plote algo grande que não possa ser acomodado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.