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)
Steve Hwang
źródło
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)
Gavin Simpson
źródło
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!

Steve Pitchers
źródło
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

Tak jak
źródło
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() 
jobligado
źródło
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.

Janac Meena
źródło
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ć.

Gina-Maria
źródło
To zrobiło to dla mnie (używając png()/ dev.off()w Rstudio).
knowah
5

wprowadź opis obrazu tutaj

Po prostu powiększ ten obszar, jeśli używasz RStudio.

vkalit
źródło
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.

jaikamal
źródło
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 ...

Liz
źródło
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)
    ```
Dr Suat Atan
źródło
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.

Dhruv Panchal
źródło
0

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

Nirmal Kumar
źródło
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ć.

Neeraj
źródło