1 Grafika w R - praca z pakietem ggplot2
1.1 O pakiecie ggplot2
Jest to pakiet do tworzenia grafiki statystycznej. Cechą wyróżniającą pakiet ggplot jest jego gramatyka, która pozwala tworzyć wykresy poprzez łączenie niezależnych komponentów (niczym układanie puzzli). Wszystkie wykresy składają się z danych, czyli informacji, które chcemy wizualizować oraz opisu sposobu mapowania danych. Istnieje 5 komponentów:
Warstwa to elementy geometryczne i przekształcenia statystyczne.
elementy geometryczne - reprezentują to, co faktycznie widać na wykresie. Zaczynają się od geom_…
elementy statystyczne - podsumowują dane, np. dopasowanie modelu, utworzenie histogramu, grupowanie danych, itp. Zaczynają się od słowa stat_…
Skale mapują wartości w przestrzeni danych na wartości w przestrzeni estetycznej. Obejmuje to użycie koloru, kształtu lub rozmiaru. Skale rysują również legendę i osie.
Coord, czyli układ współrzędnych, opisuje sposób mapowania współrzędnych danych na płaszczyznę grafiki. Zapewnia również osie i linie siatki, które pomagają odczytać wykres.
Aspekt określa sposób dzielenia i wyświetlania podzbiorów danych jako małych wielokrotności.
Motyw kontroluje najdrobniejsze szczegóły wyświetlania, takie jak rozmiar czcionki i kolor tła.
My w tym laboratorium skupimy się przede wszystkim na Warstwach.
Możliwości pakietu ggplot2 są olbrzymie, omawiamy tutaj tylko podstawy. Internet jest pełen poradników i przykładów, choćby:
2 Warstwy
Na początku musisz przekazać ramkę danych do funkcji
ggplot
i określić aes
, czyli estetyki, które
określają zmienne mapowania. Mapowanie, w skrócie, dotyczy określenia,
które zmienne i w jaki sposób zostaną odwzorowane na wykresie.
library(ggplot2) #na początku ładujemy bibliotekę
wart_x=seq(0,10, by=0.1)
wart_y=sin(wart_x)
wart_z=cos(wart_x)
df = data.frame(time=wart_x,sin=wart_y,cos=wart_z) # Tworzymy ramkę danych
ggplot(df, aes(x = time, y = sin)) #Przekazanie ramki
Aby “coś” pojawiło się na wykresie, należy dodać warstwę
odpowiadającą za wybraną reprezentację danych za pomocą znaku plus
+
oraz geometrii geom_
.
2.1 Pojedyńcze geometrie
Geometrie są podstawowymi elementarni ggplot2 i określają w jaki sposób dane są wizualizowane.
Na przykład:
ggplot(df, aes(x = time, y = sin)) + #linia kończy się znakiem plus, co oznacza "ciąg dalszy nastąpi w następnej linijce"
geom_line() #właściwe polecenie odpowiadające na rysowaniu
Uwagi - w powyższym przykładzie
ramkę danych przekazywaną do funkcji
ggplot()
można poprzedzić nazwą argumentudata
, tzn.data=df
lub umieścić ją jako pierwszy argumentpraktycznie, ramkę danych
data
oraz funkcjęaes
można przekazać też na poziomie warstwygeom_line()
, tzn. poniższe polecenie też zadziała i da taki sam efekt:
Różnica polega na tym, że dostęp do danych df
ma tylko
warstwa geom_line
.
można zbudować wykres bazujący na różnych ramkach w osobnych geometriach.
Teoretycznie wszystko można pisać “ciągiem”, jednak zasada “jedno polecenie/geometria - jedna linijka” zwiększa czytelność kodu.
2.2 Wybrane geometrie
geom_abline, geom_hline, geom_vline
- linie proste, ukośne, poziome lub pionowegeom_bar
- słupki, rysowane obok siebie lub poustawiane na sobiegeom_contour
- kontury, przydatne do opisu powierzchni w 3Dgeom_density
- obszar oznaczający ocenę jądrowego estymatora gęstościgeom_errorbar
,geom_errorbarh
- słupki błędów pionowe lub poziomegeom_histogram
- histogramgeom_linerange
- pionowe odcinkigeom_point
,geom_jitter
- kropki, wykres rozproszeniageom_rect
prostokąty o zadanych współrzędnychgeom_rug
- znaczniki na marginesie wykresugeom_smooth
- krzywa, często trendgeom_text
- napisy, etykiety obserwacjigeom_bin2d
- kwadraty wykorzystywane do prezentacji mapy ciepłageom_boxplot
- wykresy pudełkowegeom_line
- łamana krzywa
Jak widać, możliwości jest sporo, na tym oraz w kolejnych laboratoriach omówimy niektóre z nich.
2.3 Składanie geometrii
Możemy nakładać wiele warstw na jeden rysunek, poprzez dodawanie
operatorem +
kolejnych geometrii. Dla przykładu dwa wykresy
w jednym oknie:
Odpalając helpa do dowolnej geometrii, w naszym przypadku
?geom_line
znajdziemy różne opcje modyfikacji, jak na
przykład, zmianę koloru, przezroczystości, kształtu, rozmiaru, np.:
ggplot(df, aes(x=time,y=sin))+
geom_line(color="red", alpha=0.6, size=1.5)+
geom_line(aes(x=time,y=cos), color="blue", linetype = "dotdash")
Aby móc odróżnić wykresy, często chcemy, aby wykresy miały legendę. W
ggplot2
legendy są generowane automatycznie na podstawie
estetyki (takiej jak kolor, kształt, rozmiar itp.), która jest mapowana
wewnątrz funkcji aes()
. W przypadku ustawienia estetyki
poza funkcją aes()
(np. color = "zmienna"
bezpośrednio w funkcji geom_line()
), ggplot2 uznaje ją za
estetykę stałą i nie tworzy dla niej legendy. Aby wymusić utworzenie
legendy używamy funkcji
scale_color_manual("zmienna"="kolor")
dla której argument
values
powinien mapować nazwy zmiennych z
aes()
na żądane kolory. Popatrz na przykład poniżej.
ggplot(df, aes(x = time)) +
geom_line(aes(y = sin, color = "sinus"), alpha = 0.6, size = 1.5) +
geom_line(aes(y = cos, color = "cosinus"), linetype="dotdash")+
scale_color_manual(values = c("sinus" = "red", "cosinus" = "blue"))
Gdy wewnątrz funkcji aes()
dodamy więcej ustawień
estetyki to utworzy nam się więcej legend. Zauważmy, że najlepiej jest
trzymać się jednolitych oznaczeń w ramach wywołań funkcji
geom_line()
, to znaczy:
ggplot(df, aes(x = time)) +
geom_line(aes(y = sin, color = "sinus", linetype = "sinus"), alpha = 0.6, size = 1.5) +
geom_line(aes(y = cos, color = "cosinus", linetype = "cosinus")) +
scale_color_manual(values = c("sinus" = "red", "cosinus" = "blue")) +
scale_linetype_manual(values = c("sinus" = "solid", "cosinus" = "dotdash"))
W przypadku, gdy nie chcemy mieć dwóch legend, możemy wyświetlić
tylko jedną manewrując argumentem guide="none"
:
ggplot(df, aes(x = time)) +
geom_line(aes(y = sin, color = "sinus", linetype = "sinus"), alpha = 0.6, size = 1.5) +
geom_line(aes(y = cos, color = "cosinus", linetype = "cosinus")) +
scale_color_manual(values = c("sinus" = "red", "cosinus" = "blue")) +
scale_linetype_manual(values = c("sinus" = "solid", "cosinus" = "dotdash"), guide = "none")
Uwaga: W tym przypadku w legendzie niebieska linia
nie jest przerywana, czyli nie dziedziczymy typu linii. Aby połączyć 2
legendy, trzeba im nadać taką samą nazwę (parametr name
w
scale_
):
ggplot(df, aes(x = time)) +
geom_line(aes(y = sin, color = "sinus", linetype = "sinus"), alpha = 0.6, size = 1.5) +
geom_line(aes(y = cos, color = "cosinus", linetype = "cosinus")) +
scale_color_manual(name="Legenda",values = c("sinus" = "red", "cosinus" = "blue")) +
scale_linetype_manual(name="Legenda",values = c("sinus" = "solid", "cosinus" = "dotdash"))
2.4 Tworzenie adnotacji
Aby zmodyfikować nazwę wykres, osi, legendę można użyć funkcji
labs()
, np.:
ggplot(df, aes(x=time,y=sin))+
geom_line(color="red")+
geom_line(aes(x=time,y=cos), color="blue")+
labs(title="Wykres funkcji trygonometrycznych",
x="Dziedzina",
y="Wartości")
2.5 Zadanie
Utworzyć jeden rysunek, na którym znajdą się wykresy 4 różnych funkcji (np. \(\sin 2x\), \(\frac{1}{4}(x-1)(x+1)\), \(e^{-x^2}\), \(\mathrm{arctg} x\)).
Uwzględnić elementy:
różne kolory. Można użyć kodu hex koloru używając
color="#12FAA0
, koloru w rgb w skali od 0 do 1 za pomocącolor=rgb(0.1,0.7,0.2)
lub od 0 do 255color=rgb(5,128,144,maxColorValue = 255)
albo jego nazwy - lista poprzezcolors()
. Dla przypomnienia, wpisanie hasła color picker w Google pozwala na wybór koloru, jego kodu hex i rgb.wybrane style linii (pomoc
? linetype
)wspólna legenda
opis osi, tytuł rysunku
wybrać odpowiedni przedział (nie za krótki, by było widać ewentualną okresowość, ale też nie da duży, by wartości np. funkcji kwadratowej nie były zbyt duże).
W efekcie powinniśmy dostać coś podobnego do
2.6 Statystyki i agregacje
Każda warstwa ma określony dodatkowy atrybut - statystykę, czyli funkcję agregującą dane:
- np. dla wykresu punktowego
geom_point
statystyka ta to funkcja identycznościowa, czyli “nic nie robi” - np. dla wykresu słupkowego
geom_bar
domyślnie wywołuję statystykęstat_count
zliczającą wystąpienia np. liter, jak w przykładzie:
moje_dane <- data.frame(
kategoria = c("A", "B", "D", "C", "B", "B", "D", "E", "C", "C", "A", "B")
)
ggplot(moje_dane, aes(kategoria))+geom_bar()
Tutaj mamy tylko jeden atrybut (kategorię), a zliczanie działa automatycznie.
- Niektóre statystyki można parametryzować, np.
geom_smooth
, kilka przykładów:
Do zilustrowania tego użyjemy zestawu danych countries
z
pakietu Przewodnik.
## country birth.rate death.rate population continent
## 1 Afghanistan 34.1 7.7 30552 Asia
## 2 Albania 12.9 9.4 3173 Europe
## 3 Algeria 24.3 5.7 39208 Africa
## 4 Andorra 8.9 8.4 79 Europe
## 5 Angola 44.1 13.9 21472 Africa
## 6 Antigua and Barbuda 16.5 6.8 90 Americas
Funkcja geom_smooth()
domyślenie (dla danych z mniej niż
1000 punktami) używa metody LOESS, która jest lokalną regresją
nieliniową. Dopasowuje ona krzywą na podstawie sąsiednich punktów. Dla
większej liczby danych (powyżej 1000 punktów) ggplot użyje uproszczonej
metody GAM.
W przypadku, gdy nie chcemy przedziałów ufności możemy użyć
argumentów, jakie daje nam funkcja geom_smooth()
. Możemy
również wybrać prostą wyrysowywaną z wykorzystaniem regresji
liniowej.
#Przetestuj poniższy kod
ggplot(countries, aes(birth.rate, death.rate))+
geom_point()+
geom_smooth(se=FALSE, method='lm')# bez przedziałów ufności
2.6.1 Zadanie:
Wypróbować w powyższym przykładzie inne argumenty dla funkcji
geom_smooth
w szczególności takie jak span
i
formula
- sprawdzić w pomocy do czego służą.
Przykładowy wynik (zależy od wartości argumentów):
Można dodać też inne parametry, jak kolor warstwy itp:
2.7 Mapowanie
Wykresy przedstawiają kolekcje obiektów, które są opisane przez atrybuty graficzne. Mapowania określają, które atrybuty wykresów kodują, które zmienne ze zbioru z danymi.
Dwa przykłady mapowania zmiennych. W pierwszym przypadku dodatkowo w
aes
(=eng. aestethic) podajemy parametr
color
, który zmienną continent
odwzoruje za
pomocą koloru na wykresie kropkowym.
Do zilustrowania tego użyjemy ponownie zestawu danych
countries
z pakietu Przewodnik.
UWAGA: Dodanie w aes
czegoś innego poza
x
i y
skutkuje automatycznym dodaniem
legendy.
UWAGA: Poprzez aes
przekazujemy, które
zmienne z ramki danych countries
oraz w jaki sposób mają
być reprezentowane na wykresie. W powyższym przykładzie na osi
x
jest to birth.rate
, na osi y
jest to death.rate
. Zmienna continent
odwzorowywana jest na wykresie za pomocą koloru.
Można dodać inne mapowanie, np. odwzorowujące populację jako wielkość kropek w wykresie punktowym:
W przypadku odwzorowania zmiennej ciągłej za pomocą koloru pojawia się gradient koloru:
#Przetestuj poniższy kod
ggplot(countries,aes(x=birth.rate, y=death.rate, color=birth.rate))+
geom_point(size=3)
Możliwa jest też podanie mapowania dla samej warstwy, jak i zadanie
wartości argumentów (tutaj i wyżej size
) - poniżej
aes
pojawia się jako argument funkcji
geom_point
i daje skutek jak wyżej. Istotne
jest, że mapowanie dotyczy tylko aktualnej geometrii, poniżej
przykład:
#Przetestuj poniższy kod
ggplot(countries,aes(x=birth.rate, y=death.rate))+
geom_point(size=3,aes(color=birth.rate))
Przedstawimy teraz powyższe dane, używając geometrii
geom_violin()
, która tworzy tzw. wykres skrzypcowy.
Wykres skrzypcowy składa się z dwóch symetrycznych części przypominających klepsydrę lub skrzypce (stąd też jego nazwa). Każda z tych części pokazuje, ile danych znajduje się w różnych zakresach wartości – im szersza część wykresu, tym więcej danych przypada na dany przedział wartości, co obrazuje rozkład danych.
Dodatkowo na tym samym wykresie umieścimy punkty
geom_points
, które reprezentują rzeczywiste wartości
danych.
Dzięki takiemu wykresowi możemy porównać rozmieszczenie danych
(birth.rate
) między różnymi grupami
(continent
).
Zauważmy, że nałożyliśmy tutaj dwie geometrię. Sprawdź, że bez
geom_point()
powyższy kod da nam tylko wykresy
skrzypcowe.
W przypadku, gdy podamy argument aes(color=continent)
do
funkcji geom_point()
to tylko kropki będą miały kolor
odpowiadający kontynentowi, natomiast obrys wykresy skrzypcowego
pozostanie nie zmieniony, tj czarny.:
#Przetestuj poniższy kod
ggplot(countries,aes(x=continent, y=birth.rate))+
geom_violin()+
geom_point(aes(color=continent)) # tylko punkty będą pokolorowane zgodnie z odpowiadającymi in kontynentami.
2.7.1 Inne przykłady mapowania:
Oczywiście rozrzut wartości pomiędzy różnymi wartościami można zauważy za pomocą innych wykresów, jak np:
geom_point()
,geom_boxplot()
,geom_dotplot()
,geom_violin()
.
Więcej o interpretacji wykresów na kolejnych laboratoriach.
# Przetestuj poniższy kod
szkielet=ggplot(countries,aes(continent, birth.rate,color=continent, fill=continent)) #wszystko w R może być obiektem...
szkielet+geom_point()
szkielet+geom_boxplot()
szkielet+geom_dotplot(binaxis="y",stackdir="centerwhole", dotsize = 0.6)#help geom_dotplot, co to jest binaxis i stackdir? jak można je zmodyfikować?
szkielet+geom_violin(scale="width") # co robi ten dodatkowy argument?
2.8 Od statystyki do geometrii
Wykorzystywaliśmy dotychczas fakt (np. przy geom_bar
),
że geometria korzysta z domyślnej statystyki zliczającej. Ale też
statystyki mają swoje domyślne geometrie.
Zadanie: jaki efekt/zadanie/działanie ma w poniższym
przykładzie statystyka stat_ellipse
?
2.8.1 Zadanie:
Zapytać wujka Google co to jest “confidence ellipse”
2.9 Podział okna ze względu na czynnik
Panel typu facet_grid( ~b)
podział w kolumnach na
podstawie czynnika b
, tutaj kontynentu:
ggplot(countries, aes(x=birth.rate, y=death.rate))+
stat_ellipse()+
geom_point()+
facet_grid(~continent)
Panel typu face_grid( a~.)
podział w wierszach na
podstawie czynnika a
. UWAGA: ta kropka
jest obowiązkowa w tej konfiguracji!
# Przetestuj poniższy kod
ggplot(countries, aes(x=birth.rate, y=death.rate))+
stat_ellipse()+
geom_point()+
facet_grid(continent~.)
Inne opcje:
facet_grid(a ~b)
panele w kolumnach na podstawie czynnikab
, a w wierszach na podstawie czynnikaa
facet_wrap(~b)
panele na prostokątnej siatce na podstawie czynnikab
Inny przykład:
ggplot(countries, aes(x=birth.rate, y=death.rate))+
geom_point(data=countries[,-5],size=0.5,color="lightblue")+
stat_ellipse(color="red4")+
geom_point(size=2, color="red")+
facet_grid(~continent)
2.9.1 Zadanie:
Zidentyfikować w powyższym kodzie, które elementy odpowiadają za
odpowiednie składniki powyższego wykresu. W szczególności wyjaśnić
działanie data=countries[,-5]
w tym przykładzie.
3 Modyfikowanie wykresu
3.1 Modyfikowanie wykresu
za pomocą scale
Modyfikowanie automatycznych ustawień wykresu może zostać wykonane za
pomocą “skali” (eng. scale). Np. scale_shape_xxxx
służy zmianie kształtu, np:
scale_shape_manual(values=LETTERS)
- zmiana znaczników na litery,scale_shape_discrite(solid=TRUE)
- zmiana tej wartości naFALSE
powoduje zmianę znaczników na puste.
Aby zobaczyć listę możliwych modyfikacji wystarczy zacząć wpisawanie
w kodzie R lub w konsoli np. scale_shape_
i poczekać na
autouzupełnianie komendy.
Przetestuj je na poniższym przykładzie
rys1=ggplot(countries, aes(x=birth.rate, y=death.rate, shape=continent))+
geom_point()
rys1 #obiekt ggplot jest jak każdy inny w R, można go przypisać do zmiennej rys1
Inne przykładami zmiany skali są np:
scale_X_reverse()
- odwraca skalę na osi x,scale_x_sqrt()
- skala pierwiastkowa na osi x,scale_x_log10()
- skala logarytmiczna na osi x,scale_x_continuous(breaks=c(...))
- dodaje linie pomocnicze w podanych punktach,`
scale_x_continuous(breaks=c(...), limits=c())
- dodaje linie pomocnicze plus zmiana zakresu na osi.
# Przetestuj poniższy kod
x=c(1:20)
df <- data.frame(x=x, y=10^x)
rys2=ggplot(df, aes(x=x, y=y))+geom_point()
rys2
#rys2+scale_x_reverse()#odwrócenie skali na osi x
#rys2+scale_x_sqrt() # skala pierwiastkowa
rys2+scale_x_log10() # skala logarytmiczna
#rys2+scale_x_continuous(breaks=c(1,2,5,10,50)) # linie pomocnicze
#rys2+scale_x_continuous(breaks=c(10,20,21,22), limits=c(5,25)) # linie pomocnicze plus zmiana zakresu na osi
3.1.1 Zadanie
Na wspólnym rysunku narysuj wykresy funkcji: \(x^2\), \(3\cdot x^2\), \(x^3\), \(0.1 \cdot x^3\).
Użyj przedziału \([0.01,5]\) dla argumentów, np.
x=seq(0.01,5, length.out=1001)
Nadaj liniom wybrane kolory i stwórz legendę
Zmień skale osi na logarytmiczne dla obu osi
Co się stało z wykresem? W szczególności - jaki wpływ ma potęga na kształt wykresu oraz współczynnik przy potędze?
Wykres (ostatni?) powinien przypominać:
3.2 Modyfikacja układu współrzędnych i osi
Przykładowymi funkcjami, które modyfikują układ współrzędnych są:
coord_trans()
- transformacja osi,coord_fixed()
- proporcjonalne jednostki na obu osiach względem zadanej skali,coord_flip()
- zamiana osi,coord_cartesioan()
- kartezjański układ współrzędnych,coord_polar()
- biegunowy układ współrzędnych,coord_map()
- rzutuje część ziemi która jest sferyczna na płaszczyznę 2D.
3.3 Themes
Możemy zmienić globalne ustawienia dotyczące wyglądu wykresu. Jeden
ze sposobów to wykorzystanie motywów - theme
. W pakiecie
jest kilka zdefiniowanych motywów:
theme_bw()
- biały - dobry do druku,theme_dark()
- ciemny
Więcej motywów w pakiecie ggthemes
takich jak na
przykład:
them_tufte()
them_excel()
them_excel_new()
Najwygodniej jest przetestować je wykorzystując poniższy kod.
library("ggthemes")
rys2+theme_tufte()+ggtitle("theme_tufte")
rys2+theme_excel()
rys2+theme_excel_new()
?ggthemes
Możemy też zmienić wybrane elementy wykresu. Używając funkcji
theme
(w nawiasie kolejne opcje):
ggplot()+
geom_point(data=countries, aes(x=birth.rate, y=death.rate, color=continent))+
labs(title="Dodatkowo zmienione tło wykresu")+
theme(
plot.title = element_text(face = "bold", size = (25),color="steelblue"),
panel.background = element_rect(fill = 'floralwhite')
)
4 Zadania
4.1 Zadanie - wykres i jego modyfikacje
Zaczniemy od wykresu podstawowego, tym razem gęstości kilku rozkładów normalnych (o wybranych parametrach) - kopiuj/wklej:
x<-seq(-3.1,5.1, by =.01)
y1=dnorm(x)
y2=dnorm(x,sd=2)
y3=dnorm(x,sd=1/2)
y4=dnorm(x,mean=2)
xx=as.data.frame(cbind(x,y1, y2, y3, y4))
ggplot(xx)+
geom_line(aes(x,y1,color="N(0,1)"),size=2)+
geom_line(aes(x,y2,color="N(0,4)"),size=2)+
geom_line(aes(x,y3,color="N(0,1/4)"),size=2)+
geom_line(aes(x,y4,color="N(2,1)"),size=2)+
scale_color_manual(name="opis",
breaks=c('N(0,1)', 'N(0,4)', 'N(0,1/4)', 'N(2,1)'),
values=c('N(0,1)'='blue', 'N(0,4)'='red', 'N(0,1/4)'='green', 'N(2,1)'='orange'))
4.1.1 Zadanie - część a - modyfikacja osi
Za pomocą theme
zmodyfikować osie wykresu:
większa czcionka przy etykietach osi
obrócenie etykiet osi “y”
usunięcie nazw osi
Wskazówka: Warto spojrzeć na przydatny link.
Efekt powinien przypominać:
4.1.2 Zadanie - cześć b - modyfikacja tła
Zmienić kolor tła, główne linie siatki, pomocnicze linie siatki,
obramowanie poprzez themes
. Nazwy parametrów do zmiany
to:
panel.border
panel.background
panel.grid.major
panel.grid.minor
Wskazówka: Przydatny link.
Efekt powinien przypominać:
4.1.3 Zadanie - część c - modyfikacja legendy
Teraz zmieniamy poprzez themes
:
rozmiar czcionki tytułu legendy - tutaj tekstu “opis”,
legend.title
rozmiar czcionki elementów legendy,
legend.text
wyrównanie tekstu “opis” na środkowe (center),
legend.title.align
położenie legendy - ma być wewnątrz wykresu,
legend.position
ramka wokół legendy, kolorowa, pogrubiona,
legend.box.background
tło legendy pod znacznikami, tutaj jest
cyan
i bardzo daje po oczach. Lepiej dać np.lightblue
jednolity z resztą tła,legend.key
tło legendy, tutaj
lightblue
,legend.background
Wskazówka: Przydatny link
4.2 Zadanie
Wstęp: dane i kod kopiuj/wklej
Zaczniemy od importu danych w formacie Excela z Laboratorium 4 (możliwe, że trzeba będzie zmienić katalog):
library(ggplot2)
library(readxl)
Students_performance <- read_excel("Students_performance.xlsx")
head(Students_performance)
## # A tibble: 6 × 15
## StudentID Age Gender Ethnicity ParentalEducation StudyTimeWeekly Absences
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1001 17 1 0 2 19.8 7
## 2 1002 18 0 0 1 15.4 0
## 3 1003 15 0 2 3 4.21 26
## 4 1004 17 1 0 3 10.0 14
## 5 1005 17 1 0 2 4.67 17
## 6 1006 18 0 0 1 8.19 0
## # ℹ 8 more variables: Tutoring <dbl>, ParentalSupport <dbl>,
## # Extracurricular <dbl>, Sports <dbl>, Music <dbl>, Volunteering <dbl>,
## # GPA <dbl>, GradeClass <dbl>
W Laboratorium 4 znajdziemy tez opis, co która zmienna oznacza.
Zauważmy, że pewne kolumny “liczbowe” służą do kodowania np. płci (zmienna Gender), w związku z czym możliwe jest policzenie
## [1] 0.5108696
co oczywiście sensu nie ma. Dlatego też wybrane zmienne liczbowe zamienimy na zmienne jakościowe (co później pozwoli na odpowiednie ich wykorzystanie przy wykresach):
Students_performance$Gender=as.factor(Students_performance$Gender)
Students_performance$Ethnicity=as.factor(Students_performance$Ethnicity)
Students_performance$ParentalEducation=as.factor(Students_performance$ParentalEducation)
Students_performance$Tutoring=as.factor(Students_performance$Tutoring)
Students_performance$ParentalSupport=as.factor(Students_performance$ParentalSupport)
Students_performance$Extracurricular=as.factor(Students_performance$Extracurricular)
Students_performance$Sports=as.factor(Students_performance$Sports)
Students_performance$Music=as.factor(Students_performance$Music)
Students_performance$Volunteering=as.factor(Students_performance$Volunteering)
Teraz polecenie
## [1] NA
jest niewykonalne (i o to chodziło). Cały czas ma sens polecenie
## 0 1
## 1170 1222
Zadania:
UWAGA w każdym z poniższych wykresów nadać odpowiedni tytuł wykresu. Przy poszczególnych podpunktach podajemy przykładowe wyniki (np. bez wytułów, chodzi głównie o wygląd wykresu).
- narysować wykres punktowy zależności
GPA
(oś y) odStudyTimeWeekly
(oś x)
- narysować wykres punktowy zależności
GPA
(oś y) odStudyTimeWeekly
(oś x) i za pomocą kolorów zilustrować czynnikParentalSupport
, a za pomocną kształtu znacznikashape
czynnik Gender (na jednym rysunku)
- narysować wykres punktowy zależności
GPA
(oś y) odStudyTimeWeekly
(oś x) i zastosować podział na panele względem czynnikaParentalEducation
w wierszach iEthnicity
w kolumnach. Dodatkowo, można też wykorzystać parametrlabeller
funkcjifacet_grid
(sprawdź w pomocy jak działa ten parametr i przykłady jego zastosowania).
- narysować wykres
boxplot
zmiennejStudyTimeWeekly
w wersji pionowej”. Rysunek powinien wyglądać jak niżej.
- na powyższym wykresie skala na osi “x” nie ma sensu - usunąć ją
(zmiana w
theme
)
- narysować wykres
boxplot
zmiennejGPA
z podziałem (kolorami) ze względu naEthnicity
- narysować wykres
boxplot
zmiennejGPA
z podziałem (kolorami) ze względu naParentalEducation
- narysować wykres
boxplot
zmiennejGPA
z podziałem (kolorami) ze względu naParentalSupport
czy na podstawie ostatnich trzech wykresów można wysunąć jakieś wnioski
narysować wykres
boxplot
zmiennejGPA
z podziałem (kolorami) ze względu naGender
oraz na panele ze względu naEthnicity