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

Osie

Elementy tworzące osie

Na wykresach umieszcza się zazwyczaj dwie osie na dole pola kreślenia i na lewym boku pola kreślenia. Bywa jednak, że na jednym wykresie umieszcza zmienne wyliczane w nieporównywalnych ze sobą jednostkach i wartości jednej z tych zmiennych umieszcza się na osi z prawej strony wykresu. To samo dotyczyć może osi 0X, które dla różnych krzywych mogły być wyliczane innym sposobem. Ogólnie zatem można wyróżnić cztery osie. Mają one numery ułożone podobnie jak marginesy.

  • 1 – Numer osi dolnej.
  • 2 – Numer osi lewej.
  • 3 – Numer osi górnej.
  • 4 – Numer osi prawej.

Można to zobaczyć stosując dla standardowego wykresy najpierw opcje axes=FALSE, co powoduje, że domyślne osie nie pojawią się a następnie stosując funkcje axis(), której obowiązkowym argumentem jest numer osi.

windows(4.5, 2.5)
par(mar=c(3,3,2,2))
plot(1:7, axes=FALSE)
axis(1)
#
windows(4.5, 2.5)
par(mar=c(3,3,2,2))
plot(1:7, axes=FALSE)
axis(2)
#
windows(4.5, 2.5)
par(mar=c(3,3,2,2))
plot(1:7, axes=FALSE)
axis(3)
#
windows(4.5, 2.5)
par(mar=c(3,3,2,2))
plot(1:7, axes=FALSE)
axis(4)

Program generuje 4 wykresy z jedną narysowaną osią.

Opcja axes=FALSE likwiduje wszystkie osie domyślne wykresu wraz z ich etykietami. Gdy chcemy modyfikować tylko oś 0X, a oś 0Y pozostawić domyślną, wystarczy w nadrzędnej funkcji graficznej lub poprzedzającej ją funkcji par() zastosować opcję xaxt=”n”, natomiast gdy chcemy modyfikować oś 0Y pozostawiając domyślną oś 0X wystarczy napisać yaxt=”n”. Te opcje pozostawiają obramowanie wykresu, o ile istnieje.

Każda oś składa się z odcinka leżącego na granicy pola kreślenia, znaczników, etykiet i podpisu. Ich umieszczenie, rozmieszczenie, orientację, wielkość, kolor, typem linii odcinka, wielkość i rodzaj czcionki etykiet i podpisów możemy zmienić za pomocą opcji funkcji par(), nadrzędnej funkcji graficznej jak i funkcji axis(). Dość często są to jedne i te same opcje. O kolorach, wzorach, wielkości i krojach czcionki będzie mowa w odpowiednich rozdziałach. Oto wykaz najczęściej opcji służących do modyfikacji umieszczenia osi, rozmieszczenia jej elementów, orientacji etykiet oraz podpisów pod osiami.

  • mgp=c(z,y,x)   Rozmieszczenie osi (x), etykiet (y) i podpisów (z) na wykresie i względem siebie.
  • at = c()     Wykaz miejsc, gdzie mają zostać umieszczone znaczniki,
  • labels = c()   Wykaz nazw, które mają pojawić się pod znacznikami, labels = NA – brak nazw,
  • tick=FALSE   Opcja mówiąca, że w ogóle nie ma być znaczników,
  • line=n     Umiejscowienie osi w stosunku do miejsca domyślnego (n=0). Liczone jest liczbą linijek, w jakich mieści się tekst równoległy do osi. Może mieć wartości dodatnie (wchodzi na marginesy) lub ujemne – wchodzi w obszar kreślenia),
  • tck = x     Długość znaczników i ich kierunek (x dodatnie – znaczniki wewnątrz pola kreślenia, ujemne – na zewnątrz,
  • lwd.ticks=n   Grubość linii znaczników,
  • hadj = 0, hadj = 0.5, hadj = 1   Wyrównanie etykiet pod znacznikami: do lewej, do środka i do prawej,
  • padj = 0, padj = 1   Umiejscowienie etykiet pod znacznikami: z prawej / na górze albo z lewej / na dole w zależności od numeru osi.

 

Umieszczenie osi na wykresie i rozmieszczenie elementów osi

Często podpisy osi albo wartości zmiennych umieszczonych na osiach, należałoby przybliżyć lub oddalić od osi. Czasami wygodnie jest by sama oś była w innym miejscu niż brzeg pola kreślenia. Najczęściej wykonuje się to opcją mgp=c(z,y,x), która może być opcja funkcji par(), nadrzędnej funkcji graficznej lub funkcji axis(). Gdy jest zawarta w funkcji par() dotyczy wszystkich wykresów, które się za nią pojawią i dotyczy wszystkich osi. Gdy jest w obrębie nadrzędnej funkcji graficznej, dotyczy tylko tego wykresu i dotyczy wszystkich jego osi, a gdy znajduje się w funkcji axis() dotyczy tylko tej osi, która jest podana w tej funkcji. Liczba x dotyczy miejsca gdzie jest rysowany odcinek osi. Liczona jest w “linijkach” czyli krotności odległości 0.2 cala od brzegu pola kreślenia. Domyślnie ma wartość 0. Dodatniej jej wartości powodują “zjechanie” osi na marginesy, ujemne “wjechanie” na pole kreślenia. Wygląda to następująco:

windows(4.5, 2.5)
par(mar=c(3,3,0.2,0.2), mgp=c(0, -1, -2))
plot(1:7, frame=FALSE, xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
#
windows(4.5, 2.5)
par(mar=c(3,3,0.2,0.2))
plot(1:7, frame=FALSE, mgp=c(0, -1, -2), xlab="Podpis osi 0X", 
   ylab="Podpis osi 0Y")
#
windows(4.5, 2.5)
par(mar=c(3,3,0.2,0.2))
plot(1:7, axes=FALSE, xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
axis(1, mgp=c(0,-1,-2) )
axis(2, mgp=c(2,1,0))

Program tworzy trzy wykresy:

Dwa z nich wyglądają tak samo. W trzecim inaczej rozmieszczone są osie 0X i 0Y, ale jednocześnie znikły podpisy pod osiami, które należy dopisać odpowiednimi podrzędnymi funkcjami graficznymi.

Najczęściej jednak przesuwa się każdą z oś osobno i służy do tego opcja line=n funkcji axis(). Nie zmienia ona rozmieszczenia względem siebie znaczników i etykiet ustalonych w funkcji par() za pomocą opcji mgp=c(z,y,x). Co więcej dodanie tej opcji do funkcji par() powoduje, że wyświetlają się podpisy pod osiami ustawionymi domyślnie.

windows(4.5, 2.5)
par(mar=c(3,3,0.2,0.2))
plot(1:7, axes=FALSE, xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
axis(1)
axis(2)
axis(2, line=-11, at=1:7, labels=1:7*10)
#
windows(4.5, 2.5)
par(mar=c(3,3,0.2,0.2), mgp=c(1.3,0.5,0))
plot(1:7, axes=FALSE, xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
axis(1)
axis(2)
axis(2, line=-11, at=1:7, labels=1:7*10)

Program generuje dwa wykresy:

Przedstawiony wykres z dwoma osiami 0Y dotyczy hipotetycznej sytuacji gdy wydzielona z prawej strony część danych ma tak duże wartości, że lepiej jest dla nich stosować inna jednostkę pomiaru.

 

Liczba, rozmieszczenie i wielkość znaczników

Funkcje graficzne proponują podział osi na jednostki stosują one różne algorytmy, które dzielą oś tak, aby znaczniki występowały dla zaokrąglonych wartości zmiennych i aby pokazywane wartości zmiennych obok osi nie zachodziły na siebie. Czasami jednak chcemy by znaczniki były umieszczane gęściej lub rzadziej w stosunku do tego, co zaproponował program. Modyfikuje to częściowo opcja lab=c(n1,n2,n3) funkcji par() lub nadrzędnej funkcji graficznej, gdzie n1 oznacza przybliżoną liczbę znaczników na osi 0X, do której algorytm ma się zastosować, n2 to samo dla osi 0Y, n3 – kreślą długość wektora etykiet (jest jednak przez R ignorowana).

windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0), lab=c(6,6,1))
plot(0:15,0:15/5*3 )
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0), lab=c(4,3,1))
plot(0:15,0:15/5*3)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0) )
plot(0:15,0:15/5*3, lab=c(4,6,1))

Program wykonuje następujące wykresy:

Znacznie częściej organizuje się znaczniki w funkcjach axis(), które dają pełną możliwość kontroli ich liczby. Robi to opcja at=c(), której wartościami są liczby pokazujące odpowiednią współrzędną punktu, w którym ma być znacznik (dla osi poziomych – pierwsze współrzędne, dla osi pionowych – drugie).

windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0))
plot(0:15,0:15/5*3, axes=FALSE)
axis(1,at=0:5*3)
axis(2,at=0:5*2)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0))
plot(0:15,0:15/5*3, axes=FALSE)
axis(1,at=0:15)
axis(2,at=0:10)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0))
plot(0:15,0:15/5*3, axes=FALSE)
axis(1,at=0:75/5)
axis(2,at=0:50/5)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0))
plot(0:15,0:15/5*3, axes=FALSE)
axis(1,at=c(0,2,5,7,10,15))
axis(2,at=c(0,5,7,9))

Program ten rysuje następujące wykresy:

Etykiety są zawsze pod którymś znacznikiem, ale nie pod wszystkimi. Specjalny algorytm pomija te etykiety, które zachodzą na pole wykreślonej już etykiety.

Długość znaczników można określić opcją tck=x, gdzie standardowo x=-0.05. Wartości dodatnie tej opcji pokazują długość znaczników wchodzących do środka pola kreślenia. Grubość znacznika można określić opcją lwd.tick=y.

windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0))
plot(0:15,0:15/5*3, tck=0.03)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0))
plot(0:15,0:15/5*3, axes=FALSE)
axis(1,tck=-0.03)
axis(2,tck=0.03)
box()
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0))
plot(0:15,0:15/5*3, axes=FALSE)
axis(1,tck=-0.05, lwd.ticks=3)
axis(1,tck=-0.03, at=0:30/2, labels=NA)
axis(2,tck=-0.05,lwd.ticks=2)
axis(2,tck=-0.03, at=0:50/5, labels=NA)

Wykresy rysowane przez ten program wyglądają następująco:

Opcje tck=x i lwd.ticks=y można zastosować w funkcji par() poprzedzającej wykres i już nie modyfikować jej dalej. Jest to wygodne, gdy przygotowuje się serię wykresów, których ogólny wygląd ma być taki sam.

R posiada specjalną funkcję graficzną podrzędną rug() rysujacą znaczniki na dowolnej osi zgodnie z wartościami zadanego wektora. Znaczniki te mogą, ale nie muszą mieć wtedy cokolwiek wspólnego z etykietami na osi, mogą pokazywać współrzędne punktów na wykresie:

windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0))
plot(0:15,0:15/5*3, axes=FALSE)
axis(1,tck=-0.05, lwd.ticks=3)
rug(0:30/2, -0.03, 1)
axis(2,tck=-0.05,lwd.ticks=2)
rug(0:50/5, -0.03, 2)
box()
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7,0.6,0))
plot(log(1:10), axes=FALSE)
axis(1, tck=-0.05)
rug(1:10, 0.05, 1)
axis(2, tck=-0.05)
rug(log(1:10), 0.05, 2)
box()

 

Pierwszy wykres w zasadzie jest powtórzeniem wykonanego wcześniej wykresu i pokazuje jak funkcja axis() z opcją labels=NA może zostać zastąpiona przez funkcje rug(). Drugi wykres pokazije mozliwość wprowadzania znaczników osi jako odczyt współrzędnych punktów obok typowych znaczników osi z etykietami.

 

Umiejscowienie i orientacja etykiet

Etykiety standardowo umiejscowione są pod lub obok znaczników i pisane są tylko wtedy, gdy jest dla nich miejsce. Czasami, aby wykresy miały etykiety o innych wartościach, niż proponuje to program, trzeba zwiększyć zasięg pola kreślenia opcją xlim=c(x1,x2) lub ylim=c(y1,y2) pisaną najczęściej w nadrzędnej funkcji rysującej. Znacznie lepiej jest jednak zrobić samemu osie z porządnymi etykietami za pomocą opcji at funkcji axis() lub zrobić jedno i drugie.

windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.4,0.5,0), tck=-0.03)
plot(3:10/7, 8:15/5)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.4,0.5,0), tck=-0.03)
plot(3:10/7, 8:15/5, xlim=c(0,1.5), ylim=c(1,3))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.4,0.5,0), tck=-0.03)
plot(3:10/7, 8:15/5, axes=FALSE, xlim=c(3/7,1.5), ylim=c(1.5,3))
axis(1,at=1:3/2)
axis(2,at=3:6/2)
box()

Program daje następujące wykresy:

Orientację etykiet można zmienić za pomocą opcji las=n funkcji par() i innych funkcji graficznych. Wartościami tej opcji mogą być liczba całkowite od 0 do 3, które oznaczają:

  • las=0 – poziomo przy osi poziomej, prostopadle przy osi pionowej (ustawienie standardowe),
  • las=1 – poziomo przy obu osiach,
  • las=2 – prostopadle przy obu osiach,
  • las=3 – prostopadle przy osi poziomej, poziomo przy osi pionowej.

Można to zobaczyć na przykładzie:

windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03, las=0)
plot(1:10)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03, las=1)
plot(1:10)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03, las=2)
plot(1:10)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03, las=3)
plot(1:10)

Program powoduje powstanie 4 wykresów:

Dokładnie takie same wykresy powstaną, gdy opcja las=n zostanie zastosowane w nadrzędnej funkcji graficznej. Natomiast jej zastosowanie w funkcjach axis() dotyczy tylko tej osi, którą funkcja ta rysuje.

Czasami zamiast liczb na wykresach (zwłaszcza typu barplot() i boxplot()) chcemy umieścić wyjaśnienia. Służy do tego opcja labels=c() funkcji axis(), która jest ściśle związana z opcją at=c(). Myszą być wektorami o tej samej długości. Opcja at=c(), jak wcześniej wyjaśniono, umieszcza znaczniki w określonych miejscach i są nim przyporządkowywane odpowiednie liczby odczytywane ze współrzędnych pola kreślenia (a wyświetlane są tylko te, które mieszczą się na wykresie). Jeżeli jednak w funkcji axis() wystąpi opcja labels=c(), to etykiety liczbowe zostają zamienione na teksty występujące w tym ciągu. Oto trzy sposoby umieszczenia pod słupkami literowych oznaczeń w funkcji barplot():

Można to zobaczyć na przykładzie:

windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03)
barplot(c(“A”=2, “B”=3, “C”=1))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03)
a=barplot(c(2, 3, 1))
axis(1, at=a, labels=c(“A”, “B”, “C”))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03)
a=barplot(c(2, 3, 1))
axis(1, at=c(0,a,a[3,1]+1), labels=c(“”,”A”, “B”, “C”,””))

Program generuje trzy następujące wykresy:

Gdy jest na to miejsce można w miejscu etykiety wstawić obszerniejsze wyjaśnienie:

windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(3,1.5,0))
boxplot(1:10,2:20, boxwex=0.6)
axis(1,at=c(1,2), labels=c("Dane z wojewodztwa\n mazowieckiego",
"Dane z województwa\n podkarpackiego"))

Program ten spowoduje powstanie następującego wykresu:

Umiejscowienie i orientacja podpisów osi

Podpisy osi są obowiązkowe we wszystkich wykresach związanych z opracowaniem danych. W biologii za brak podpisu choć jednej osi można dostać dwójkę (odpowiednik szkolnej pały). Tylko wtedy gdy etykiety na osiach jednoznacznie określają zmienną można sobie podpis odpuścić. Przykładowo gdy w miejscu etykiet występują słowa “samiec” i “samica” podpis osi typu “Płeć” może być pominięty, lecz, na przykład “Płeć szczurów wędrownych”, powinien już wystąpić.

Podpisy osi dotyczą etykiet, które pojawiają się przy tej osi. Zatem na wykresach pokazujących średnie i odchylenia standardowe ciężarów samic i samców skunksów z Kolorado, podpis osi 0Y powinien brzmieć (ciężar [kg]), a nie (“średni ciężar [kg]”), bo na osi 0Y są ciężary i gdzieś między nimi mieści się średni ciężar. Podobne zasady dotyczą wykresów, których osie zostały zlogarytmowane. Gdy etykietami punktów są 0.1, 1, 10, 100, … (przedzielone czasem innymi liczbami) to są to niezlogarytmowane wartości ustawione na zlogarytmowanej osi. Wtedy w podpisie nie używamy słowa “zlogarytmowane …”. Natomiast gdy robimy wykres na zlogarytmowanych danych i na osi pokazują się liczby tworzące ciąg arytmetyczny – trzeba tego słowa użyć w popisie osi. Pokazują to wykresy utworzone przez następujący program:

odleglosc=c(1,1.3,1.4,2.4,3.2,4.5,11,22,56,101)
wynik=c(2,1,3,2,4,3,2,3,5,4)
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03)
plot(odleglosc,wynik, xlab=”odległość”, ylab=”wynik”)
#
odleglosc=c(1,1.3,1.4,2.4,3.2,4.5,11,22,56,101)
wynik=c(2,1,3,2,4,3,2,3,5,4)
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03)
plot(odleglosc,wynik, xlab=”odległość”, ylab=”wynik”, log=”x”)
#
odleglosc=c(1,1.3,1.4,2.4,3.2,4.5,11,22,56,101)
wynik=c(2,1,3,2,4,3,2,3,5,4)
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.6,0.5,0), tck=-0.03)
plot(log(odleglosc,10),wynik, xlab=”logarytm dziesiętny odległości”, ylab=”wynik”)

Powstaną trzy wykresy z poprawnie podpisaną osią 0X.

Zazwyczaj podpis umieszcza się pod osią na marginesach. Można to jednak zmienić za pomocą opisanej już opcji mgp=c(z,y,x). Niestety stosuje się ona do obu osi jednocześnie. Gdy chcemy podpis jednej z osi umieścić wewnątrz pola kreślenia trzeba zastosować podrzędną funkcję graficzną text(), pozwalającą dopisywać teksty na wykresie (przede wszystkim w polu kreślenia).

Oto trzy programy pokazujące, jak tworzy się podpisy osi umiejscowione wewnątrz wykresu:

windows(4.5, 2.5)
par(mar=c(2,2,0.5,0.5), mgp=c(-1,0.5,0))
plot(1:10, xlab=”Podpis osi 0X”, ylab=”Podpis osi 0Y”)
#
windows(4.5, 2.5)
par(mar=c(2,3,0.5,0.5), mgp=c(1.7,0.5,0))
plot(1:10, xaxt=”n”,xlab=””, ylab=”Podpis osi 0Y”)
axis(1)
text((par(“usr”)[1]+par(“usr”)[2])/2, 1.3, “Podpis osi 0X”)
#
windows(4.5, 2.5)
par(mar=c(3,2,0.5,0.5), mgp=c(1.7,0.5,0))
plot(1:10, xlab=”Podpis osi 0X”, yaxt=”n”, ylab=””)
axis(2)
text(1, (par(“usr”)[3]+par(“usr”)[4])/2, srt=90, “Podpis osi 0Y”)

Program tworzy trzy następujące wykresy:

Obowiązkowymi argumentami funkcji text() są współrzędne środka miejsca, gdzie będzie dopisany tekst. Te współrzędne dotyczą układu współrzędnych utworzonego w polu kreślenia. Opcja srt=x pokazuje kąt w stopniach o jaki ma być obrócony tekst zgodnie z ruchem wskazówek zegara.

Podpisy pod osiami domyślnie są wyśrodkowane. Czasem jednak umieszcza się je lewej lub prawej strony lub nieco przesuwa, gdy zasłaniają jakiś wyróżniony punkt. Można to zrobić dla obu osi stosując opcję adj=x w funkcji par() lub nadrzędnych funkcjach graficznych. Wartością tej opcji jest liczba z przedziału [0,1], gdzie:

  • 0 oznacza wyrównanie do lewej (dla tekstów poziomych) i w dół (dla tekstów pionowych).
  • 0.5 oznacza wyśrodkowanie
  • 1 oznacza wyrównanie do prawej (dla tekstów poziomych) i w górę (dla tekstów pionowych)
  • liczby pośrednie oznaczają przesunięcia w lewo, prawo albo w górę , dół w zależności od wartości liczby.

Wygląda to następująco:

windows(4.5, 2.5)
par(mar=c(2.5,2.5,0.5,0.5), mgp=c(1.5,0.5,0), tck=-0.03, adj=0)
plot(1:10, xlab=”Podpis osi 0X”, ylab=”Podpis osi 0Y”)
#
windows(4.5, 2.5)
par(mar=c(2.5,2.5,0.5,0.5), mgp=c(1.5,0.5,0), tck=-0.03, adj=0.5)
plot(1:10, xlab=”Podpis osi 0X”, ylab=”Podpis osi 0Y”)
#
windows(4.5, 2.5)
par(mar=c(2.5,2.5,0.5,0.5), mgp=c(1.5,0.5,0), tck=-0.03, adj=1)
plot(1:10, xlab=”Podpis osi 0X”, ylab=”Podpis osi 0Y”)
#
windows(4.5, 2.5)
par(mar=c(2.5,2.5,0.5,0.5), mgp=c(1.5,0.5,0), tck=-0.03, adj=0.8)
plot(1:10, xlab=”Podpis osi 0X”, ylab=”Podpis osi 0Y”)

Program generuje cztery wykresy.

Gdy zmienia się wyrównanie tylko w jednej osi, należy jej podpis dopisać funkcją mtext() pozwalającą na dopisywanie tekstu na marginesach. Jej obowiązkową opcją jest dopisywany tekst w cudzysłowie, numer marginesu (side=n) i numer linijki (line=x), gdzie ma być wstawiony tekst. Opcja adj=x, wstawiona w tę funkcję, pokazuje jak wyrównany będzie tekst.

windows(4.5, 2.5)
par(mar=c(2.5,2.5,0.5,0.5), mgp=c(1.5,0.5,0), tck=-0.03)
plot(1:10, xlab=””, ylab=”Podpis osi 0Y”)
mtext(“Podpis osi 0X”, 1,1.3, adj=0)
#
windows(4.5, 2.5)
par(mar=c(2.5,2.5,0.5,0.5), mgp=c(1.5,0.5,0), tck=-0.03)
plot(1:10, xlab=””, ylab=”Podpis osi 0Y”)
mtext(“Podpis osi 0X”, 1,1.3, adj=1)
#
windows(4.5, 2.5)
par(mar=c(2.5,2.5,0.5,0.5), mgp=c(1.5,0.5,0), tck=-0.03)
plot(1:10, xlab=”Podpis osi 0X”, ylab=””)
mtext(“Podpis osi 0Y”, 2,1.3, adj=0)
#
windows(4.5, 2.5)
par(mar=c(2.5,2.5,0.5,0.5), mgp=c(1.5,0.5,0), tck=-0.03)
plot(1:10, xlab=”Podpis osi 0X”, ylab=””)
mtext(“Podpis osi 0Y”, 2,1.3, adj=1)

Dzięki temu programowi powstają cztery wykresy:

 

Bardzo rzadko, ale może pojawić się potrzeba napisania podpisu pod osią pionową horyzontalnie ułożoną czcionką. Na dzień dzisiejszy nie wymyślono w R funkcji zmieniającej orientację poszczególnych liter w tekście, który sam ma nie zmienić pozycji. Zawsze można posłużyć się programem wpisującym poszczególne litery w normalnej pozycji, tylko jedna pod drugą. Wygląda to następująco:

windows(4.5, 2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(1.7, 0.5,0), tck=-0.03)
plot(0:7, xlab="Podpis osi 0X", ylab="", las=1)
par(xpd=TRUE)
a="Podpis osi 0Y"
b=nchar(a)
x=par("usr")[1]-0.8
dy=(par("usr")[4]-par("usr")[3])/b
for (i in 1:b) text(x,dy*(i-1), substr(a,b+1-i,b+1-i))

Program tworzy następujący wykres:

Przy innych danych zapewne należałoby poprawić współrzędne x i dy wskazujące miejsca poszczególnych liter. Zastosowana w programie opcja xpd=TRUE funkcji par() pozwala na dodawanie do wykresu różnych rzeczy poza polem kreślenia posługując się jego współrzędnymi.

Pozostałe sposoby modyfikowania osi związane są modyfikacją tekstu w różnych funkcjach graficznych i opisane zostały w rozdziale dotyczącym napisów, podpisów i tekstu.

 

Wspólne podpisy dla rycin złożonych z wielu wykresów

Najczęściej na rycinach złożonych z wielu wykresów umieszcza się wyniki badań, które w jakiś sposób porównuje się ze sobą. Na przykład, są wykonane dla dwóch różnych populacji, w różnych okresach za pomocą takich samych badań lub eksperymentów. Ich osie poziomą lub pionową, należy opisać tą samą frazą. Raczej nie powinno się tego rozbić pod każdym wykresem osobno. Odpowiedni podpis należy wstawić na marginesie “oma” i czasem sprawia to kłopoty. Podpis ten wstawia się za pomocą funkcji mtext() z jej opcjami side=n i line=n, tak jak wstawia się dodatkowe teksty na marginesach pojedynczego wykresu. Aby jednak pojawił się on na zewnętrznym marginesie, trzeba użyć dodatkowej opcji outer=TRUE. Poniższy program pokazuje jego działanie.

windows(4.5,2.5)
par(mar=c(1,3,0.5,0.5), mgp=c(1.8, 0.5, 0), mfrow=c(1,2),oma=c(2,0,0,0),xpd=NA)
barplot(c(3,2,6,3,1,2), ylab=”Podpis osi 0Y”)
barplot(c(3,2,6,3,1,2), ylab=””)
mtext(“Wspólny podpis osi”,side=1,line=0.5)
#
windows(4.5,2.5)
par(mar=c(1,3,0.5,1), mgp=c(1.8, 0.5, 0), mfrow=c(1,2),oma=c(2,0,0,0),xpd=NA)
barplot(c(3,2,6,3,1,2), ylab=”Podpis osi 0Y”)
barplot(c(3,2,6,3,1,2), ylab=””)
mtext(“Wspólny podpis osi”,side=1,line=0.5,outer=TRUE)

Na pierwszej rycinie podpis został zrobiony tylko do ostatniego wykresu na jego marginesie. Na drugim podpis jest na marginesie wspólnym.

   

Opcja outer=TRUE funkcji mtext() pozwala pisać na wszystkich czterech marginesach tworzonych przez opcje oma=c() w funkcji par(), co pokazuje następujący program:

windows(5,4)
par(mar=c(2,2,0.5,0.5), mfrow=c(2,2),oma=c(2,2,2,2),xpd=NA)
plot(c(1:6,6:1), xlab="", ylab="", main="")
plot(1:12, xlab="", ylab="", main="")
plot(12:1, xlab="", ylab="", main="")
plot(c(6:1,1:6), xlab="", ylab="", main="")
mtext("Wspólny podpis osi 0X",side=1,line=0.5,outer=TRUE)
mtext("Wspólny podpis osi 0Y",side=2,line=0.5,outer=TRUE)
mtext("Wspólny podpis osi dodatkowej 0X",side=3,line=0.5,outer=TRUE)
mtext("Wspólny podpis osi dodatkowej 0Y",side=4,line=0.5,outer=TRUE)

Efektem działania tego programu jest następujący wykres:

Osie logarytmiczne i transformowane funkcją rosnącą

W przypadku nierównomiernego rozmieszczenia wartości zmiennej (np. wiele wartości małych i kilka dużych) stosuje się przekształcenia normalizujące. Wartości zmiennej przekształca się funkcją F(x), rosnącą by interpretacja obserwowanych zależności nie zmieniała się. Jednym z najczęściej stosowanych przekształceń jest F(x)=log(x). Sposoby wykonania wykresu dla takich danych obrazuje następujący przykład:

Stężenie magnezu
62.14
38.69
47.72
61.35
86.03479
Odległość od drogi
18.24
20.93
32.21
35.53
41.74
Stężenie magnezu
31.28
18.65
52.54
31.82
32.84
Odległość od drogi
68.40
109.05
171.55
1574.55
2023.56

Programy wykonujące wykresy mają postać:

x=c(18.24, 20.93, 32.21, 35.53, 41.74, 68.40, 109.05, 171.55, 1574.55, 2023.56)
y=c(31.28, 18.65, 52.54, 31.82, 32.84, 62.14, 38.69, 47.72, 61.35, 86.03479)

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(x,y, xlab="Odległość od drogi", ylab="Stężenie magnezu", main="")

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(log(x,10),y, xlab="Logarytm odległości od drogi", 
     ylab="Stężenie magnezu", main="")

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(x,y, xlab="Odległość od drogi", ylab="Stężenie magnezu", main="", log="x")

Zależność między odległością od drogi a stężeniem magnezu możemy pokazać na trzy sposoby:

     

Pierwszy z wykresów pokazuje zasadność zlogarytmowania odległości. Drugi i trzeci są takie same – różnią się tylko etykietami na osi poziomej. Ponieważ podpis osi ma wskazywać czym są liczby umieszczone jako etykiety, gdy sami logarytmujemy dane musimy to zaznaczyć w opisie osi. Gdy stosujemy opcję log=”x” mamy wprawdzie nierównomiernie rozmieszczone znaczniki, ale etykiety oznaczają odległości, nie logarytmy odległości. Inaczej zatem podpisujemy tę oś.

Czasami na zlogarytmowanej osi chciałoby się dorysować znaczniki. Podkreśla to, że mamy do czynienia z danymi transformowanymi. Można to zrobić dodając funkcję axis() w następującej formie:

x=c(18.24, 20.93, 32.21, 35.53, 41.74, 68.40, 109.05,    171.55,
    1574.55, 2023.56)
y=c(31.28, 18.65, 52.54, 31.82, 32.84, 62.14, 38.69, 47.72, 61.35, 86.03479)

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(x,y, xlab="Odległość od drogi", ylab="Stężenie magnezu", 
   main="", log="x")
axis(1, at=(0:10)*10, labels=rep("",11), tck=-0.03)
axis(1, at=(1:25)*100, labels=rep("",25), tck=-0.03)

Powstanie następujący wykres:

Opcja log może przyjmować wartość

"x"

, gdy chcemy mieć zlogarytmowane wartości na osi poziomej, wartość

"y"

, gdy chcemy mieć zlogarytmowane wartości na osi pionowej oraz wartość

"xy"

gdy chcemy mieć zlogarytmowane obie osie.

x=c(3.39, 3.58, 3.68, 3.71, 4.45, 4.55, 5.00, 5.42, 8.14, 18.56)
y=c(3.02, 3.29, 3.64, 4.79, 8.29, 8.46, 8.65, 8.76, 12.95, 35.10)

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(x,y, xlab="Podpis osi 0X", ylab="Podpis osi 0Y", main="")

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(x,y, xlab="Podpis osi 0X", ylab="Podpis osi 0Y", main="", log="x")

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(x,y, xlab="Podpis osi 0X", ylab="Podpis osi 0Y", main="", log="y")

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(x,y, xlab="Podpis osi 0X", ylab="Podpis osi 0Y", main="",log="xy")

  

        

Opcja log występuje także w funkcjach barplot() i boxplot(). Stosuje się jednak ona tylko do danych liczbowych dodatnich.

x=c(3.39, 3.58, 3.68, 3.71, 4.45, 4.55, 5.00, 5.42, 8.14, 18.56)
y=c(3.02, 3.29, 3.64, 4.79, 8.29, 8.46, 8.65, 8.76, 12.95, 35.10)

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
barplot(rbind(x,y), xlab="Podpis osi 0X", ylab="Podpis osi 0Y", main="", 
    log="y", xpd=FALSE)

windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
boxplot(x,y, xlab="Podpis osi 0X", ylab="Podpis osi 0Y", main="", log="y")

   

Wszelkie obliczenia wykonywane przez funkcje barplot() i boxplot() odbywają się na zlogarytmowanych danych.

Opcja log zmienia pole kreślenia w taki sposób, że kolejne liczby pojawiają się w odległościach zlogarytmowanych. Ułatwia to umiejscowienie elementów dorysowywanych przez podrzędne funkcje graficzne.

Nie zawsze do wyrównania odległości między danymi stosuje się funkcję logarytm dziesiętny. Gdy na przykład wiele wartości zmiennej ma wartość 0 i tylko pewne z nich są dodatnie, dobrą transformację danych daje funkcja pierwiastek (czasem pierwiastek wyższego stopnia itd.). Czasami stosuje się transformację Box-Coxa w celu znormalizowania danych, czyli takiego ich przekształcenia, aby można było dla nich wykonać najmocniejsze testy statystyczne. Jest to transformacja postaci:

gdzie λ dobiera się do danych.

Jak dla innych transformacji danych niż logarytmiczna, dostosować osie tak, by nie trzeba było zmieniać ich podpisów? Postępujemy według następującego schematu:

  1. Przekształcamy dane (np funkcją T(x)).
  2. Robimy wykres dla przekształconych danych bez rysowania osi (tej lub tych dla których zastosowano transformację).
  3. Dorysowujemy oś ze znacznikami w odległościach T(1:x) z etykietami 1:x.

Wygląda to następująco:

x=c(0, 1.39, 2.58, 3.68, 3.71, 4.45, 4.55, 5.00, 5.42, 8.14, 18.56)
y=c(0, 1.02, 2.29, 3.64, 4.79, 8.29, 8.46, 8.65, 8.76, 12.95, 35.10)
#
windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(x,y, xlab=”Podpis osi 0X”, ylab=”Podpis osi 0Y”, main=””)
#
windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(sqrt(x),y, xlab=”Podpis osi 0X”, ylab=”Podpis osi 0Y”, main=””, axes=FALSE)
axis(1, at=sqrt(0:18), labels=0:18 )
axis(2)
box()
#
windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(x,sqrt(y), xlab=”Podpis osi 0X”, ylab=”Podpis osi 0Y”, main=””, axes=FALSE)
axis(1)
axis(2, at=sqrt(0:36), labels=0:36)
box()
#
windows(4.5,2.5)
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0))
plot(sqrt(x),sqrt(y), xlab=”Podpis osi 0X”, ylab=”Podpis osi 0Y”, main=””, axes=FALSE)
axis(1, at=sqrt(0:18), labels=0:18 )
axis(2, at=sqrt(0:36), labels=0:36)
box()

 

        

Tworzenie wykresów z osiami przekształconymi funkcją nieliniową jest w R prostsze, niż w jakimkolwiek innym programie.

Spis treści