Do tego miejsca Czytelnik poznał już dziesiątki różnych wykresów, które utworzyć można jednolinijkowymi komendami. Jednak zazwyczaj diabeł tkwi w szczegółach i okazuje się, że dobrze by było jakiś element wykresu dodać, przesunąć, pomniejszyć obrócić itp. W tym rozdziale przedstawimy metody manipulowania poszczególnymi elementami wykresów.
Najczęściej wykorzystywaną funkcją graficzną jest z pewnością funkcja plot ( ). Standardowe wywołanie funkcji plot to:
plot(x, y, ...)
gdzie x, y to współrzędne rysowanych punktów (jeżeli współrzędne x nie są podane, to domyślnie będą nimi kolejne liczby naturalne). Poza tymi dwoma wartościami można podać wiele parametrów graficznych, które będą opisane w tabeli 4.3. Proste przykłady użycia tej funkcji były przedstawione w podrozdziale 1.6.4.
^ I / Funkcja plot O jest często przeciążana, co oznacza, że w zależności od ‘klasy argumentu zachowanie funkcji plot jest inne. W poprzednim roz-dziale przedstawione były efekty użycia funkcji plot, gdy argumentem były obiekty klasy density, histogram lub ecdf. Inne rozpoznawane klasy argumentów to: factor, table, dendrogram, lm, princomp i wiele innych. Listę wszystkich można sprawdzić wywołując funkcję methods (plot).
Funkcja plot O powoduje narysowanie nowego okna graficznego (oraz usunięcie zawartości poprzedniego). Do inicjacji okna graficznego wywołuje funkcje niższego poziomu plot.neuO (inicjującą ramkę graficzną) a następnie plot.uindouO (inicjującą współrzędne okna graficznego, ustalającą zakresy osi itp). Efekt końcowy działania tych funkcji można modyfikować zmieniając domyślne wartości parametrów graficznych (ich pełna lista przedstawiona jest w tabeli 4.3).
Funkcją plot O możemy narysować jedną krzywą (wykres), do której automatycznie zostaną dopasowane osie itp. Możemy dorysować kolejne krzywe np. funkcją linesO lub pointsO, ale nie zmienią się już ustawienia osi wykresu. Dorysowana linia może znaleźć się poza wykresem, co nie zawsze jest pożądane. Odpowiednikami funkcji plotO, linesO i pointsO do rysowania zbioru krzywych lub punktów na jednym wykresie są funkcje matplot(graphics), matlines(graphics) i matpoints(graphics). Wszystkie trzy mają one podobne deklaracje:
matplot(x, y, type = "p", lty - 1:5, lud = 1, pch = NULL, col = 1:6, cex - NULL, bg = NA, xlab - NULL, ylab = NULL,
xlim = NULL, ylim - NULL.....add = FALSE)
matpoints(x, y, type * "p", lty - 1:5, lud =1, ...) matlines (x, y, type = "1", lty * 1:5, lud =1, ...)
Ruch Browna
Rysunek 4.35: Przykładowe trajektorie ruchu Browna narysowane funkcją matplotf)
Argumentami x i y mogą być macierze lub wektory. Domyślnie funkcje te rysują krzywe (funkcja matlinesO) lub punkty (funkcja matpointsO) o współrzędnych określonych przez kolejne kolumny macierzy x i y (tz. pierwsza linia ma współrzędne x określone przez pierwszą kolumnę macierzy x, a współrzędne y opisane przez pierwszą kolumnę macierzy y, druga przez drugie kolumny itp). Jeżeli jeden z argumentów (np. x) jest wektorem, to współrzędne y dla rysowanych linii opisane są przez kolumny macierzy y, a współrzędne x dla wszystkich linii będą takie saińe. Jeżeli argument x nie jest podany, to przyjmowane są za niego kolejne liczby naturalne.
Pozostałymi argumentami można określać inne parametry graficzne fstylc linii, punktów itp., podobnie jak dla innych funkcji graficznych). Można też podać wektor parametrów graficznych, w tym przypadku każda kolejna kolumna będzie rysowana innym stylem linii, kolorem, grubością itp. Na rysunku 4.35 przedstawiamy cztery przykładowe trajektorie ruchu Browna narysowane z użyciem funkcji matplotO. Poniżej przedstawiamy kod generujący ten rysunek.
# 4 trajektorie ruchu Browna, kumulatywne sumy szumów gaussowskich ruchBrowna » matrix(inonn(800), 200, 4)
ruchBrowna =■ apply(ruchBrowna, 2, curasum)
# rysujemy wszystkie trajektorie na jednym wykresie matplot(ruchBrowna, type’"!", lud-2, lty=l)
Jeżeli zamiast wykresu chcemy narysować obrazek, to najwygodniej jest posłużyć się funkcją image (graphics). Deklaracja tej funkcji jest następująca:
image(x, y, z, zlim, xlim, ylim, col=heat.colors(12), add=FALSE,
xaxs="i", yaxs="i", xlab, ylab, breaks, oldstyle=FALSE, ...)