Trwały błąd nieprawidłowego stanu grafiki podczas korzystania z ggplot2


119

Uważam, że moja ramka danych jest w porządku, a mój kod jest w porządku. W rzeczywistości wyeliminowałem części ramki danych i większość kodu graficznego, aby uczynić rzeczy tak prostymi, jak to tylko możliwe. Ale nadal otrzymuję:

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

Co tu jest nie tak? Oto dane:

 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

Kiedy pracuję z tymi danymi, podaję daty w ten sposób:

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

i tutaj chcę zrobić wykres rozrzutu:

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

3
Czy próbowałeś (ponownie) zainstalować ggplot2?
Paul Hiemstra

Dodałem to jako odpowiedź, w ten sposób inni ludzie mogą łatwiej znaleźć odpowiedź. Możesz zaakceptować odpowiedź, klikając znacznik wyboru obok mojej odpowiedzi. Żeby potwierdzić, że ggplot2zainstalowałeś pierwotnie?
Paul Hiemstra

Tak, został już zainstalowany.
Nazer

3
ponowne uruchomienie sesji R rozwiązało mój problem.
Chris,

FYI - ten problem może się również pojawić, jeśli spróbujesz użyć wymiarów figury, które są zbyt małe (np. Próba podania wymiarów w calach bez określania jednostki).
Keith Hughitt

Odpowiedzi:


353

Napotkałem ten sam błąd i rozwiązałem go, uruchamiając:

dev.off()

a następnie ponownie uruchomić wykres. Myślę, że urządzenie graficzne zostało wcześniej w jakiś sposób pomieszane przez eksportowanie niektórych grafik i nie zostało zresetowane. To zadziałało dla mnie i jest prostsze niż ponowna instalacja ggplot2.


1
To rozwiązuje problem, ale czy masz pojęcie, dlaczego tak się dzieje?
Pedro Cavalcante,

2
@PedroCavalcanteOliveira Miałem problem po par(mfrow = c(..., ...))wcześniejszym użyciu. Nie wiem o innych parametrach graficznych, ale mogą powodować ten problem.
loki

1
Pomogło, ale co robi?
vasili111

9

Rozwiązaniem jest po prostu ponowna instalacja ggplot2. Być może występuje niezgodność między używaną wersją R a zainstalowaną wersją ggplot2. Ewentualnie coś mogło pójść nie tak podczas ggplot2wcześniejszej instalacji , powodując widoczny problem.


4
Dzięki za pozostawienie tej odpowiedzi tutaj. Chociaż druga odpowiedź jest prostsza, dev.off()nie działa dla mnie i jest to dobra druga opcja, aby spróbować ponownie zainstalować ggplot2.
Nazer

Może lepiej spróbować dev.off()najpierw, zajmuje mniej czasu niż ponowna instalacja pakietu. Jeśli dev.off()nie zadziała, może to być drugi krok .
Jason Goal

6

Zauważyłem, że dzieje się tak, gdy mieszasz wykresy ggplot z wykresami w tej samej sesji. Zastosowanie rozwiązania „dev.off” zaproponowanego przez Paula rozwiązuje problem.


Co dev.off'robi?
vasili111

4

Prawdopodobnie nie musisz ponownie instalować ggplot2

Rozwiązanie: wróć do działki, która wcześniej nie działała. Weźmy na przykład poniższe wyjście konsoli. Marginesy rysunku (okno wyświetlające wykresy) były zbyt małe, aby wyświetlić wykresy par (MinusInner). Następnie, gdy próbowałem wykonać następny wykres q, R wciąż zawieszał się na poprzednim błędzie.

pairs (MinusInner) Błąd w plot.new (): zbyt duże marginesy rysunku qplot (Sample.Type, BAE, data = MinusInner, geom = "boxplot") Błąd w .Call.graphics (C_palette2, .Call (C_palette2, NULL) ): nieprawidłowy stan grafiki

Naprawiłem pierwszy błąd, rozszerzając okno wykresu i ponownie uruchamiając wykres par (MinusInner). Więc niech to, zadziałało.

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


0

Rozwiązałem to, usuwając wszystkie wątki w konsoli, a następnie upewniając się, że obszar wykresu jest wystarczająco duży, aby pomieścić to, co tworzyłem.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.