Erro persistente de estado de gráfico inválido ao usar ggplot2


119

Eu acredito que meu dataframe está bom e meu código está bom. Na verdade, eliminei partes do quadro de dados e a maior parte do código gráfico para tornar as coisas o mais básicas possível. Mesmo assim, eu consigo:

Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) : 
  invalid graphics state

O que há de errado aqui? Aqui estão os dados:

 date   trt var val
1/8/2008    cc  sw5 0.2684138
1/8/2008    cc  sw15    0.2897586
1/8/2008    cc  sw5 0.2822414
2/8/2008    cc  sw5 0.2494583
2/8/2008    cc  sw5 0.2692917
2/8/2008    cc  sw15    0.2619167
2/8/2008    cc  sw5 0.204375
3/8/2008    cc  sw5 0.2430625
3/8/2008    cc  sw5 0.2654375
3/8/2008    cc  sw5 0.2509583
3/8/2008    cc  sw5 0.2055625
1/8/2008    ccw sw15    0.2212414
1/8/2008    ccw sw5 0.3613448
1/8/2008    ccw sw5 0.2607586
2/8/2008    ccw sw5 0.2087917
2/8/2008    ccw sw15    0.3390417
2/8/2008    ccw sw5 0.2436458
2/8/2008    ccw sw5 0.290875
3/8/2008    ccw sw5 0.20175
3/8/2008    ccw sw15    0.328875
3/8/2008    ccw sw5 0.2328958
3/8/2008    ccw sw5 0.2868958

Quando trabalho com esses dados, especifico datas como esta:

df<-df[order(as.Date(df$date,format="%d/%m/%Y")),,drop=FALSE]

e aqui eu quero fazer um gráfico de dispersão:

ggplot(data = df,aes(x = date,y = val)) + 
 geom_point(aes(group = trt))

3
Você já tentou (re) instalar o ggplot2?
Paul Hiemstra

Eu adicionei isso como uma resposta, de forma que outras pessoas possam encontrar a resposta mais facilmente. Você pode aceitar a resposta clicando na marca de seleção ao lado da minha resposta. Só para confirmar, você ggplot2instalou originalmente?
Paul Hiemstra

Sim, já foi instalado.
Nazer

3
reiniciar a sessão R resolveu meu problema.
Chris,

Para sua informação - este problema também pode surgir se você tentar construir as dimensões da figura que são muito pequenas (por exemplo, tentar fornecer dimensões em polegadas sem especificar a unidade).
Keith Hughitt

Respostas:


353

Encontrei este mesmo erro e resolvi executando:

dev.off()

e então rodar o enredo novamente. Acho que o dispositivo gráfico foi bagunçado anteriormente de alguma forma ao exportar alguns gráficos e não foi reiniciado. Isso funcionou para mim e é mais simples do que reinstalar o ggplot2.


1
Isso resolve o problema, mas você tem ideia de por que resolve?
Pedro Cavalcante

2
@PedroCavalcanteOliveira Tive o problema, depois de usar par(mfrow = c(..., ...))antes. Não sei sobre outros parâmetros gráficos, mas eles podem causar este problema.
loki

1
Ajudou, mas o que é que ajuda?
vasili111

9

A solução é simplesmente reinstalar ggplot2. Talvez haja uma incompatibilidade entre a versão R que você está usando e a versão instalada ggplot2. Como alternativa, algo pode ter dado errado durante a instalação ggplot2anterior, causando o problema que você vê.


4
Obrigado por manter esta resposta aqui. Embora a outra resposta seja mais simples, dev.off()não funcionou para mim e é uma boa segunda opção para tentar reinstalar o ggplot2.
Nazer de

Pode ser melhor tentar dev.off()primeiro, leva menos tempo do que reinstalar o pacote. Esta pode ser uma segunda etapa se dev.off()não funcionar.
Jason Goal

6

Descobri que isso ocorre quando você mistura gráficos ggplot com gráficos plot na mesma sessão. Usar a solução 'dev.off' sugerida por Paul resolve o problema.


O que dev.off'faz?
vasili111

4

Você provavelmente não precisa reinstalar o ggplot2

Solução: volte para o gráfico que não funcionou anteriormente. Veja a saída do console abaixo, por exemplo. As margens da figura (a janela que exibe seus gráficos) eram muito pequenas para exibir o gráfico de pares (MinusInner). Então, quando tentei fazer o próximo qplot, R ainda estava preso ao erro anterior.

pares (MinusInner) Erro em plot.new (): margens da figura muito grandes qplot (Sample.Type, BAE, data = MinusInner, geom = "boxplot") Erro em .Call.graphics (C_palette2, .Call (C_palette2, NULL) ): estado gráfico inválido

Corrigi o primeiro erro expandindo a janela do gráfico e executando novamente o gráfico de pares (MinusInner). Então, blam, funcionou.

pares (MinusInner) qplot (Sample.Type, BAE, data = MinusInner, geom = "boxplot")


0

Resolvi isso limpando todas as plotagens no console e, em seguida, certificando-me de que a área da plotagem era grande o suficiente para acomodar o que estava criando.


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.