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)
Steve Hwang
fonte
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)
Gavin Simpson
fonte
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!

Steve Pitchers
fonte
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

Assim como
fonte
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() 
jobligado
fonte
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.

Janac Meena
fonte
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.

Gina-Maria
fonte
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.

vkalit
fonte
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.

Jaikamal
fonte
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 ...

Liz
fonte
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)
    ```
Suat Atan PhD
fonte
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.

Dhruv Panchal
fonte
0

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

Nirmal Kumar
fonte
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.

Neeraj
fonte