2011-06-28 9 views
7

Próbuję utworzyć macierz wykresów, ale chcę, aby lewy górny róg był pusty. Więc używam:Błąd w ramce(): zbyt duże marginesy na rysunkach

frame() 

Aby którym R odpowiada:

Błąd frame(): marginesie rysunek zbyt dużych

Używam następujące dwa wiersze utworzyć mój układ :

plotIDs <- matrix(c(1:16), 4, 4, byrow = T); 
layout(plotIDs, widths = c(0.5,1,1,1,1), heights = c(0.5,1,1,1,1)); 

i to daje mi następujący układ:

4 by 4 layout with first row and col at half height

Gdybym wtedy wydać frame() otrzymuję powyższy błąd. Co ja robię źle? Nie widzę żadnego sposobu określenia wysokości lub szerokości polecenia frame() (tylko alias dla plot.new())?

Odpowiedz

9

Komunikat oznacza, że ​​marginesy na rysunku są zbyt duże i nie pozostawiają wystarczającej ilości miejsca na wykres.

Spróbuj zmniejszyć margines:

op <- par(mar = par("mar")/2) 
plot.new() ## this is optional for this example 
plot(1:10) 
par(op) ## tidy up to restore the default par setting 

Możesz zacząć od ramy() lub plot.new(), lub po prostu wykreślić do pierwszego panelu. Pamiętaj, że musisz wziąć pod uwagę ustawienie odpowiedniego marginesu dla każdego z różnych paneli i dostosować rozmiary etykiet i tak dalej.

Dla całkowicie pustym panelu, równie dobrze można zabić margines całkowicie:

op <- par(mar = rep(0, 4)) 
plot.new() 
par(op) 
7

Możesz zostawić puste panele za pomocą układu przez posiadające 0 w matrycy, więc jeśli używasz 0:15 zamiast 1:16, wtedy pierwszy panel będzie pusty, bez konieczności przeskakiwania. Oczywiście będziesz mógł ustawić marginesy i cex dla pozostałych paneli.

+0

To jest bardziej wnikliwa odpowiedź niż moja – mdsumner

+0

@mdsumner, nie wiem, że moja jest bardziej wnikliwa, jest szybką pracą, ale dałeś więcej informacji o tym, co było przyczyną błędu i co z tym zrobić (które z moją pracą nadal są potrzebne do faktycznych fabuł). –

+0

Prawda, a teraz masz lepszy komentarz :) – mdsumner

Powiązane problemy