Błąd w plot.new (): za duże marginesy rysunku w R


111

Jestem nowy w R, ale wykonałem wiele wykresów korelacji z mniejszymi zestawami danych. Jednak kiedy próbuję wykreślić duży zestaw danych (2 GB +), mogę dobrze wykonać wykres, ale legenda się nie pojawia. Jakakolwiek rada? czy alternatywy?

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)     

Błąd plot.new(): zbyt duże marginesy rysunku

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

1
Powinieneś dostarczyć nam odtwarzalny przykład demonstrujący choroby, które masz. stackoverflow.com/questions/12765668/…
Roman Luštrik

Wypróbowałem wszystkie powyższe i nic nie działało. Jednak od czasu do czasu (przynajmniej dla nowicjusza, takiego jak ja), dane w macierzy lub data.frame mogły zostać przekształcone w jakiś typ, którego nie byłeś świadomy. W takim przypadku przed danymi użyj „as.numeric”, aby upewnić się, że to nie jest problem.
pApaAPPApapapa

Odpowiedzi:


86

Podejrzewam, że problem polega na tym, że obszar małej figury 2 utworzony przez twój layout() wywołanie nie jest wystarczająco duży, aby zawierać tylko domyślne marginesy, nie mówiąc już o wykresie.

Przed linią powodującą problem spróbuj:

par(mar = rep(2, 4))

następnie wykreśl drugi obraz

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

Będziesz musiał bawić się rozmiarem marginesów na par() połączenia, które pokazuję, aby to naprawić. Konieczne może być również zwiększenie rozmiaru rzeczywistego urządzenia, na którym drukujesz.

Ostatnia wskazówka: zapisz par()ustawienia domyślne przed ich zmianą, więc zmień istniejące par()połączenie na:

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

potem na koniec kreślenia zrobić

par(op)

Ach, dziękuję za wyjaśnienie. Zamiast tego manipulowałem układem (matrix ()). Doceń pomoc!
Steve Hwang

2
to była dla mnie właściwa wskazówka. Musiałem zwiększyć rozmiar obrazu lub zmniejszyć rozdzielczość wpng(filename="myfile.png", res=150, width = 1000, height = 1000)
vanao veneri

146

Ten błąd może wystąpić w Rstudio po prostu dlatego, że okienko „Wykresy” jest ledwo za małe. Spróbuj powiększyć „Pliki, wykresy, pakiety, pomoc, przeglądarkę” i zobacz, czy to pomaga!


8
To rozwiązało mój problem! Rozszerzyłem okno „Środowisko”, zmniejszając okno „Wykresy” itp. Musiałem tylko rozszerzyć okno. Dziękuję Ci!
Rock Lee

Zgoda, wpłynęło to również na moje RStudio, a samo rozszerzenie okna pomogło.
Kingz

Czasami przypadkowo kończy się kilka okienek z powodu użycia par (). par(mfrow=c(1,1))można zresetować Cię do jednego okienka.
Matt,

1
to był dla mnie bardzo dziwny błąd, ponieważ jestem nowy w R. Nigdy wcześniej nie miałem żadnych problemów z innymi językami / IDE, w których układ IDE wpłynie na mój kod!
Adarsha,

Świetnie, to też zadziałało. Ale taki dziwny błąd!
Mohammad

70

Jeśli otrzymasz ten komunikat w RStudio, kliknięcie ikony „miotły” „Wyczyść wszystkie wykresy” na karcie Wykresy i ponowne użycie funkcji plot () może zadziałać.

wprowadź opis obrazu tutaj


1
To najlepsza odpowiedź.
NewbieDave

15
graphics.off()
rawr

Podoba mi się ta odpowiedź
O.rka

To naprawdę najlepsza odpowiedź. Dzięki.
merve bıçakçı

24

Czasami zdarza się to w RStudio. Aby rozwiązać ten problem, możesz spróbować wydrukować do zewnętrznego okna (tylko Windows):

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

1
To lepsza odpowiedź niż kupowanie większego monitora. Istnieje również polecenie x11 (), które powinno działać w systemie Linux.
Ron Jensen - Wszyscy jesteśmy Monicą

1
Najbardziej odpowiednia odpowiedź w historii. Dzięki.
TeeKea

jakikolwiek odpowiednik dla MacOSX?
TeYaP

Wypróbowałem to rozwiązanie, gdy dostaję Error in plot.new() : figure margins too largebłąd w RStudio podczas rysowania OLS-CUSUM i zadziałało cudownie. Wielkie dzięki jobligado.
Erdogan CEVHER

19

Otrzymałem ten błąd w R Studio i został po prostu naprawiony, zwiększając pasek boczny, klikając i przeciągając jego krawędź od prawej do lewej.


2
to był zwycięzca. Dlaczego to w ogóle coś takiego?
colin

2
Żadne inne rozwiązanie nie działało dla mnie poza tym.
zsad512

1
Nie wiem jak i dlaczego, ale to też było jedyne rozwiązanie, które zadziałało.
TheSciGuy

10

Sprawdź, czy Twój obiekt jest listą czy wektorem. Aby to zrobić, wpisz is.list(yourobject). Jeśli to prawda, spróbuj zmienić jego nazwę x<-unlist(yourobject). W ten sposób stanie się wektorem, który można wykreślić.


To zrobiło to dla mnie (używając png()/ dev.off()w Rstudio).
knowah


3

Znalazłem dzisiaj ten błąd. Początkowo próbowałem wyprowadzić go do .jpegpliku o małej szerokości i wysokości.

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

Później zwiększyłem szerokość i wysokość do:

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

Nie było błędu. :)

Możesz także bawić się rozdzielczością, jeśli rozdzielczość jest wysoka, potrzebujesz większej szerokości i wysokości.



2

Zmagałem się z tym błędem od tygodni (używając RStudio). Próbowałem przesuwać okno wykresu coraz większe i mniejsze, ale to nie zawsze pomagało. Kiedy przeniosłem (przeciągnąłem) aplikację na mój większy monitor, problem zniknął! Byłem oszołomiony ... tyle straconych godzin ... Wiedziałem, że mój kod jest poprawny ...


0

Obszar roboczy RStudio Plots ogranicza szerokość i wysokość wydruku. Jeśli jednak utworzysz wykres z fragmentu kodu Rmarkdown , działa on bez ograniczeń pola płótna, ponieważ obszar kreślenia jest ustawiony zgodnie z rozmiarem papieru.

Na przykład:

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

Znalazłem dziś ten sam błąd. Próbowałem użyć przycisku „Wyczyść wszystkie wykresy”, ale dawał mi ten sam błąd. Wtedy ta sztuczka zadziałała dla mnie, spróbuj zwiększyć obszar fabuły, przeciągając. Na pewno ci to pomoże.


0

Po prostu użyłem Wyczyść wszystkie wykresy, a następnie ponownie podaj polecenie wykresu i było to pomocne


1
Witamy w SO. Czy możesz wyjaśnić, dlaczego to jest odpowiedź.
Mike Poole

0

Jeśli margines jest niski, zawsze lepiej jest zacząć od nowego urządzenia kreślącego:

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

Nigdy nie otrzymasz błędu marginesu, chyba że narysujesz coś dużego, czego nie da się pomieścić.

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.