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.