Ta strona wykorzystuje ciasteczka ("cookies") w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu. Czy wyrażasz na to zgodę?

Czytaj więcej
< All Topics
Print

Organizacja okna graficznego

Otwieranie okna graficznego

Okna graficzne w systemie windows otwiera się za pomocą funkcji windows(), w systemie Unix/Linux za pomocą funkcji x11(). Jej pierwsze wywołanie spowoduje powstanie okna graficznego z numerem 2 (numer 1 został zarezerwowany na “brak okna graficznego”).

Drugie, trzecie i kolejne wywołania funkcji windows() spowodują powstawanie kolejnych pustych okien graficznych z kolejnymi numerami. Ostatnie wywołane okno będzie aktywne.

Numery otwartych okien graficznych można w każdej chwili pracy z R uzyskać za pomocą funkcji dev.list(). Funkcja dev.cur() pokazuje numer okna aktywnego. Funkcja dev.set(n), gdzie n jest liczba całkowitą, uaktywnia okno o numerze n, o ile jest ono otwarte. Gdy okno o tym numerze nie jest otwarte uaktywnione zostanie pierwsze okno z listy okien otwartych. Funkcja dev.new() spowoduje powstanie nowego okna graficznego o najniższym numerze (ale większym od 2), którego nie ma wśród otwartych okien.

> dev.list()
windows windows windows
2       3       4
> dev.cur()
windows
4
> dev.set(2)
windows
2
> dev.set(1)
null device
1
> dev.new(15)
> dev.new(1)
> dev.new()
> dev.list()
windows windows windows windows windows windows
2       3       4       5       6       7

Zamykanie otwartych okien graficznych wykonuje się za pomocą funkcji dev.off(n), gdzie n jest numerem okna, które chcemy zamknąć. Funkcja ta przy tym pokazuje numer okna aktywnego. Wywołanie jej bez numeru powoduje zamknięcie okna aktywnego. Pozostałe numery otwartych okien nie muszą być kolejnymi liczbami, ale można sprawdzić numer otwartego okna poprzedniego do okna n-tego (funkcje dev.prev(n)) i następnego (funkcja dev.next(n)).

> dev.list()
windows windows windows windows windows windows
2       3       4       5       6       7
> dev.off(3)
windows
7
> dev.list()
windows windows windows windows windows
2       4       5       6       7
> dev.set(5)
windows
5
> dev.off()
windows
6
> dev.list()
windows windows windows windows
2       4       6       7
> dev.prev(4)
windows
2
> dev.next(4)
windows
6

Podsumowując, funkcje związane z tworzeniem okien graficznych to:

  • windows()
  • dev.list()
  • dev.cur()
  • dev.new()
  • dev.off()
  • dev.set()
  • dev.prev()
  • dev.next()

 

Wymiary okna graficznego

Najważniejszymi opcjami funkcji windows() są width=x1, height=x2 określającymi wielkość tego okna, gdzie x1 i x2 są wyrażone calach. Cal jest ciągle podstawową jednostką miary długości w USA i Wielkiej Brytanii równą 2.54 cm. Funkcja windows() bez opcji otwiera standardowe okno, którego szerokość i wysokość wynoszą 7 cali. Wywołanie windows(width=7, height=5), windows(width=5, height=4), windows(width=3, height=2.5) spowoduje otwarcie trzech nowych okien różnej wielkości.

Chcąc mieć wykres zajmujący całą szerokość strony formatu A4 między marginesami wynoszącymi 2.5 cm musimy wykonać wykres o szerokości 16 cm. Odpowiadająca mu wysokość (tak by zajmował połowę strony) to 12 cm. Jeżeli przewidujemy podpis pod wykresem zazwyczaj skracamy jego wysokość do 9-10 cm. Należy wtedy rozpocząć robienie wykresu od polecenia:

w=16/2.54
h=10/2.54
windows(width=w, height=h)

lub krócej:

w=16/2.54
h=10/2.54
windows(w, h)

Przy braku nazw opcji trzeba pamiętać, że pierwsza liczba określać będzie szerokość wykresu, a druga jego wysokość. Podane wymiary odpowiadają typowemu rozmiarowi wykresu umieszczanego w pracach dyplomowych (wyjątkiem są złożone wykresy zajmujące całą stronę). Jest to standardowy rozmiar, gdy przyjmie się zasadę umieszczania wykresów w wykazie na końcu pracy. Gdy jednak ktoś zdecyduje się umieszczać wykresy w obrębie tekstu w miejscu ich cytowania, powinien zdecydować się na wymiary dwa razy mniejsze, tak by nie przeszkadzały one w czytaniu pracy. Gdy posyłamy pracę z wykresami do wydawnictwa, by została ona wydrukowana, należy przeczytać uwagi dla autorów umieszczane na stronach wydawnictwa. Są tam podane preferowane przez wydawnictwo wymiary wykresów (należy zwrócić przy tym uwagę w jakich jednostkach). Najlepiej ściśle się do nich dostosować.

 

Podział okna graficznego

Podział okna graficznego na nc kolumn o jednakowej szerokości i nr wierszy jednakowej wysokości może być zrealizowany za pomocą opcji mfcol=c(nr,nc) albo mfrow=c(nr,nc) funkcji par(). Funkcja par() pojawia się najczęściej po funkcji windows() i służy do organizacji okien graficznch (marginesów, wyglądów osi, tła wykresu i wielu innych opcji). Po zastosowaniu podziału okna graficznego, trzeba zastosować nc*nr nadrzędnych funkcji graficznych, które będą się wpisywać do kolejnych części okna graficznego.

windows(7.5,5)
par(mfcol=c(2,3))
for (i in 1:6) plot(1:i, main=paste("Wykres ",i))

Po wykonaniu tego programu powstanie następujący wykres:

Porządkowanie kolejnych okienek okna graficznego jest tu wykonywane zgodnie z domyślnymi regułami porządkowania wyrazów w macierzach (od góry do dołu, a kolumny wykresów – od lewej do prawej). Ponadto zastosowanie opcji mfcol lub mfrow powoduje zmniejszenie wielkości czcionki i wielkości innych elementów graficznych (przy podziale na dwa jest to równoważne pomnożeniu pierwotnych wymiarów czcionki przez 0.83, a przy podziale na więcej części – pomnożeniu tych wymiarów przez 0.66).

Podział aktywnego okna graficznego na równe części można wykonać także za pomocą funkcji split.screen(c(n1,n2)). Okno graficzne zostanie wtedy podzielone na n1 razy w pionie i n2 razy w poziomie. Powstaje w ten sposób n1n2 części okna graficznego, w które można wpisać jakiś wykres wykonany nadrzędną funkcją graficzną. Każda część ma swój numer, przy czyn część 1 znajduje się w lewym górnym rogu, a kolejne numery są przyporządkowane częściom zgodnie z kierunkiem pisania (od lewej do prawej i z góry w dół). Wpisanie wykresu do n-tej części musi poprzedzić funkcja screen(n).

 

windows(4.5,2.5)
split.screen(c(1,2))
screen(1)
barplot(c(4,1,5,3))
screen(2)
barplot(c(5,3,1))
#
windows(2.5,4.5)
split.screen(c(2,1))
screen(1)
barplot(c(4,1,5,3))
screen(2)
barplot(c(5,3,1))

Powyższe programy spowodują wygenerowanie w aktywnym oknie dwóch następujących wykresów:

                             

Funkcję split.screen() nie musi poprzedzać funkcja windows(). Potrafi ona sama wywołać okno graficzne o domyślnych wymiarach (7 cali wysokość i 7 cali szerokość). Ponadto ta sama funkcja może podzielić określoną część na n3n4 odpowiednio mniejszych części, co daje czasem pożądane efekty. Wykonuje to opcja screen=n. Po takim podziale te małe części uzyskują kolejne numery od n1n2+1 począwszy.

split.screen(c(2, 1))
split.screen(c(1, 2), screen=2)
screen(1)
matplot(1:10,cbind(1:10,10:1))
screen(3)
plot(1:10)
screen(4)
plot(10:1)

Program ten utworzy wykres postaci:

Większe możliwości dzielenia ekranu graficznego ma funkcja layout(matrix()). Związana z nią funkcja layout.show() pozwala na śledzenie tych zmian i zorientowanie się jakie numery są przyporządkowane poszczególnym częściom okna graficznego.

layout(matrix(1:9,3,3,byrow=TRUE))
layout.show(9)

Powyższe instrukcje spowodują, że okno graficzne wyglądać będzie następująco:

Przy wczytywaniu wykresów zarówno granice podziałów jak i numery znikną. Wczytanie wykresu w części n-tej spowoduje automatyczne przejście do części n+1-szej, gdy w programie pojawi się kolejna nadrzędna funkcja graficzna.

Poszczególne części okna graficznego wydzielonego przez funkcję layout() mogą dostać te same numery (wpisywane są one do macierzy). Wtedy wykres o tym numerze (zgodnie z kolejnością pojawiania się nadrzędnych funkcji graficznych) będzie znajdywał się w prostokącie obejmującym te części. Może to dawać efekty częściowego nakładania się na siebie wykresów.

windows(6,6)
layout(matrix(c(1,3,3,3,2,2,2,3,2,2,2,3,2,2,2,4),4,4))
layout.show(4)
plot(1:10)
plot(10:1)
plot(1:10)
plot(10:1)

Spowoduje to powstanie wykresu postaci:

Dodatkowo, funkcja layout() ma opcje wights=c() i heights=c(), za pomocą których można określić względne długości i szerokości poszczególnych części.

windows(2,2)
layout(matrix(2:1,2,1),heights=c(3,8))
layout.show(2)
windows(4.2,2)
layout(matrix(2:1,1,2),widths=c(3,2))
layout.show(2)
windows(2,2)
layout(matrix(c(1,2,2,2),2,2),widths=c(3,8),heights=c(3,8))
layout.show(2)

Spowoduje to następujące podziały trzech okienek graficznych (2,3 i 4).

 

Spis treści