R #01 – wykresy – tutorial

14-cze-2019

Dane zaczynają mówić, kiedy je zobaczymy. W przeciwnym razie zostają anonimowe lub co najmniej ukryte. To dlatego powstają różne pakiety pozwalające tworzyć wykresy jak gplot, seaborn i inne. Tutaj jednak chcę pokazać jak uzyskiwać wykresy wykorzystując tylko bazowe pakiety języka R.

Zacznijmy więc od danych – trzeba je załadować, to też dobry moment na sprawdzenie ilości tych danych:

chickwts 
?chickwts

nrow(chickwts)

Te dane zawierają informacje – uwaga – o tym jaką wagę osiągnęły kurczaki, którym podawano różnego rodzaju karmę. Uważasz, że temat jest głupi? Chyba nie, głównie z dwóch powodów. Po pierwsze to zaczynając zabawę z tymi danymi rzeczywiście nie wiemy jakie ziarenka dawać kurczakom, żeby szybko urosły, a kiedy kończymy analizę, już mamy pewne pomysły. A drugi powód jest taki, że chyba prawie każdy od czasu do czasu lubi przekąsić dobrze upieczone udko…

No to zaczynamy rysowanie:

plot(x=1:nrow(chickwts), y=chickwts$weight)

Ten rodzaj wykresu to tzw. scatter plot czyli wykres punktowy. Każdy rysowany punkt ma dwie współrzędne – x, którym jest numer kurczaka oraz y, który oznacza jego wagę. Parametry x i y to właśnie jedyne parametry, z jakich tu skorzystaliśmy.

Zgadzam się, zbyt wiele tu jeszcze nie widać, chociaż biorąc pod uwagę, że dane kurczaków są posortowane wg rodzaju karmy, to już można by postawić pierwszą hipotezę. Istnieją karmy „niskokaloryczne” – to te po lewej stronie i bardziej kaloryczne – to te pośrodku lub po prawej.

Można pobawić się dostępnymi parametrami polecenia plot:

pch=’+’  oznacza, że zamiast kropek mają być rysowane plusiki

plot(x=1:nrow(chickwts), y=chickwts$weight, pch='+')

ale w tym miejscu można też podać numer symbolu, jaki ma być narysowany na wykresie

plot(x=1:nrow(chickwts), y=chickwts$weight, pch=15)

Domyślny rozmiar kształtów to „1”, ale można to zmienić korzystając z argumentu cex

plot(x=1:nrow(chickwts), y=chickwts$weight, cex=5)

Tego rodzaju wykres mógłby służyć do analizy zagęszczeń, a gdyby jeszcze połączyć wielkość tych kółek z jakąś kolejną miarą, zrobiło by się ciekawie i użytecznie.

Kolejna opcja, to oczywiście kolor:

plot(x=1:nrow(chickwts), y=chickwts$weight, col='blue')

Tak przy okazji, listę dostępnych kolorów zwraca funkcja colors:

colors()

lista jest imponująca:

> colors()
 [1] "white" "aliceblue" "antiquewhite" 
 [4] "antiquewhite1" "antiquewhite2" "antiquewhite3" 
 [7] "antiquewhite4" "aquamarine" "aquamarine1" 
...
[649] "wheat3" "wheat4" "whitesmoke" 
[652] "yellow" "yellow1" "yellow2" 
[655] "yellow3" "yellow4" "yellowgreen"

 

Dobrze by było, żeby osie wykresu były opisane. Zrobisz to parametrami xlab (label dla osi x) i ylab (label dla osi y)

plot(x=1:nrow(chickwts), y=chickwts$weight, col='blue',
 xlab = 'Chicken', ylab = "Chicken's weight")

Kolejny wykres wymaga kilku przygotowań. Chciałbym, żeby poszczególne kształty i ich kolor zależały od rodzaju podawanej karmy:

  • my_colors to zestaw kolorów z jakiego chcę skorzystać
  • my_shapes to zestaw kształtów określony liczbami
  • color_column to wektor kolorów dopasowany już osobno dla każdego „kurczaka” osobno
  • shapes_column to wektor kształtów dopasowany osobno dla każdego „kurczaka”

Posiadając takie dane, wystarczy w funkcji plot w parametrze col wskazać na color_column a w parametrze pch wskazać na shapes_column. A jeśli do tego obrazka ma być dołączona legenda, to wystarczy ja dodać za pomocą polecenia legend…:

 

my_colors <- c('red', 'yellow', 'green', 'orange', 'violet', 'blue')
 my_shapes = (15:20)

color_column <- my_colors[as.numeric(chickwts$feed)]
 shapes_column <- my_shapes[as.numeric(chickwts$feed)]
 plot(x=1:nrow(chickwts), y=chickwts$weight,
 col=color_column, pch = shapes_column,
 xlab = 'Chicken', ylab = "Chicken's weight")

legend("topleft", legend = levels(chickwts$feed),
 col = my_colors,
 pch = my_shapes )

 

Komentarze są wyłączone

Autor: Rafał Kraik