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:
1.2 Instalowanie i ładowanie
W przeciwieństwie do wcześniej omawianego pakietu graphics, pakiet
ggplot2
nie jest automatycznie ładowany czy instalowany
Jeżeli pakiet ggplot2
nie jest zainstalowany, to należy
go zainstalować w standardowy sposób.
Pakiet ggplot2 należy (w każdym nowym pliku) załadować, np. poprzez
library(ggplot2)
(wystarczy 1 raz).
1.3 Pierwszy wykres
Możliwości pakietu ggplot2
są ogromne, pozwalają na
dostosowanie każdego elementu wykresu. Standardowo potrzebne jest
przekazanie danych do stworzenia wykresu najlepiej za pomocą ramki
danych poprzez parametr data
(lub jako pierwszy argument
bez nazwy) oraz przekazanie funkcji aes
określającej jakie dane z data zostaną odwzorowane na wykresie
(i w jaki sposób).
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(kol_x=wart_x,kol_sin=wart_y,kol_cos=wart_z) # Tworzymy ramkę danych
ggplot(data=df, aes(x = kol_x, y = kol_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_
.
1.4 Pojedyńcze geometrie
Geometrie są podstawowymi elementami ggplot2 i określają w jaki sposób dane są wizualizowane.
Na przykład:
ggplot(df, aes(x = kol_x, y = kol_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 za rysowanie wykresu
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.
1.5 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
1.6 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:
Sprawdzając pomoc 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=kol_x,y=kol_sin))+
geom_line(color="red", alpha=0.6, size=1.5)+
geom_line(aes(x=kol_x,y=kol_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(values="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 = kol_x)) +
geom_line(aes(y = kol_sin, color = "sinus"), alpha = 0.6, size = 1.5) +
geom_line(aes(y = kol_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 = kol_x)) +
geom_line(aes(y = kol_sin, color = "sinus", linetype = "sinus"), alpha = 0.6, size = 1.5) +
geom_line(aes(y = kol_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 = kol_x)) +
geom_line(aes(y = kol_sin, color = "sinus", linetype = "sinus"), alpha = 0.6, size = 1.5) +
geom_line(aes(y = kol_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 = kol_x)) +
geom_line(aes(y = kol_sin, color = "sinus", linetype = "sinus"), alpha = 0.6, size = 1.5) +
geom_line(aes(y = kol_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"))
1.7 Tytuł wykresu, nazwy osi
Aby zmodyfikować nazwę wykres, osi, legendę można użyć funkcji
labs()
, np.:
ggplot(df, aes(x=kol_x,y=kol_sin))+
geom_line(color="red")+
geom_line(aes(x=kol_x,y=kol_cos), color="blue")+
labs(title="Wykres funkcji trygonometrycznych",
x="Dziedzina",
y="Wartości")
1.8 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
, możliwe, że w aes działają tylko nazwy)wspólna legenda
opis osi, tytuł rysunku
wybrać odpowiedni przedział (nie za krótki, by było widać ewentualną okresowość, ale też nie za duży, by wartości np. funkcji kwadratowej nie były zbyt duże. W poniższym przykładzie jest to przedział \([-\pi,\pi]\)).
W efekcie powinniśmy dostać coś podobnego do
2 Wybrane zastoswania
geometrii i możliwości ggplot2
2.1 Dane do wykresów
Użyjemy danych z pakietu (wymaga jednorazowego zainstalowania)
a dokładniej zbiór danych countries
. Wyświetlimy opis
tego zbioru oraz zapoznamy się z jego strukturą i zawartością (wykonać
polecenia):
2.2 Wykres punktowy -
geom_point()
i inne
Zaczniemy od wykresu punktowego
library("ggplot2")
ggplot(countries,aes(birth.rate,death.rate))+ #x= oraz y= można pominąć jako standardowa kolejność argumentów
geom_point()
Następnie możemy dodać koleją warstwę odpowiadającą za trend
2.2.1 Zadanie
Sprawdzić w pomocy geom_smooth
, za co odpowiada parametr
se
. Jaki efekt da zamiana go na wartość TRUE
?
Parametr size
chyba jest oczywisty, ale warto przetestować
zmianę jego wartości. Jak zmienić kolor krzywej trendu z niebieskiego
(standardowy) na własny?
2.3
geom_violin
i inne geometrie
2.3.1 Zadanie - wykres w wybranymi geometriami cz. 1
Do podstawowego polecenia (patrz niżej) dodać kolejne elementy
wykresu (linijki) zakomentowane pod wykresem. Przy każdym dodaniu nowej
linijki dajemy znak +
na końcu poprzedniej linijki.
Uwaga 1: Teoretycznie wszystko można pisać “ciągiem”, jednak zasada “jedno polecenie/geometria - jedna linijka” zwiększa czytelność.
Uwaga 2: W tym przykładzie przez funkcję
aes
podajemy 3 atrybuty/parametry wykresu: zmienne
x
, y
oraz dodatkowo label
.
Ostatni atrybut jest wykorzystywany przez geom_text
do
podpisania punktów wykresu.
Uwaga 3: Otrzymany wykres jest dość chaotyczny, ma na celu zilustrowanie działania wybranych geometrii
2.3.2 Zadanie - wykres w wybranymi geometriami cz. 2
W powyższym wykresie:
- Wyjaśnić/sprawdzić w pomocy działanie argumentów np.
alpha
, spróbować zmienić ich wartości. - Usunąć
aes(fill=continent)
, co się zmieniło? - Zmienić
label=country
nalabel=population
, co się zmieniło? - Zmienić
check_overlap
naFALSE
, co się zmieniło? - Przy okazji, co to jest “wykres skrzypcowy”?
2.4 Przykłady mapowanie zmiennych na atrybuty wykresu
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:
UWAGA: Dodanie w aes
czegoś innego poza
x
i y
skutkuje dodaniem legendy.
UWAGA: Poprzez aes
przekazujemy, które
zmienne z ramki danych data
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 populacje jako wielkość kropek w wykresie kropkowym:
Nic nie stoi na przeszkodzie, żeby kontynenty zilustrować wielkością
kropek (choć to trochę bez sensu, o czym ostrzega
warning
):
Można też użyć kształtu znacznika:
W przypadku odwzorowania zmiennej ciągłej za pomocą koloru pojawia się gradient koloru:
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ę w geom_point
i daje skutek jak
wyżej. Istotne jest że mapowanie dotyczy tylko
aktualnej geometrii, poniżej inny przykład będzie:
Inny przykład - mapowanie w ggplot
zmiennej
continent
na kolor ustala kolor kropek i obrys wykresu
skrzypcowego:
ggplot(countries,aes(x=continent, y=birth.rate,label=country,color=continent))+
geom_violin()+
geom_point()
ale mapowanie możemy zadać np. tylko dla kropek, obrys pozostaje czarny:
ggplot(countries,aes(x=continent, y=birth.rate,label=country))+
geom_violin()+
geom_point(aes(color=continent))
2.4.1 Więcej przykładów
szkielet=ggplot(countries,aes(continent, birth.rate,color=continent, fill=continent)) #wszystko w R może być obiektem...
szkielet+geom_point()
szkielet+geom_dotplot(binaxis="y",stackdir="center")#help geom_dotplot, co to jest binaxis i stackdir? jak można je zmodyfikować?
2.4.2 Atrybuty geometrii
Każda geometria przedstawia dane za pomocą wybranych atrybutów -
więcej szczegółów w pomocy, na przykład na temat
geom_point
Wymagane są w tym przypadku x
i y
,
pozostałe jak alpha
, …. stroke
są opcjonalne.
Mogą one być mapowane ze zbioru danych - przykłady wyżej.
3 Statystyki i agregacje
Każda warstwa ma określony dodatkowy atrybut - statystykę, czyli funkcję agregującą dane:
- np. dla wykresu kropkowego statystyka ta to funkcja identycznościowa, czyli “nic nie robi”
- np. dla wykresu słupkowego
geom_bar
domyślnie wywołuję statystykęstat_count
:
tutaj mamy tylko jeden atrybut (continent), a zliczanie działa automatycznie.
- (niektóre) statystyki można parametryzować, np.
geom_smooth
, kilka przykładów:
Wykres kropkowy plus trend wraz z wrysowanym odchyleniem standardowym:
Wykres kropkowy plus trend bez odchylenia standardowego:
Wykorzystanie regresji liniowej do estymacji trendu:
method
może mieć wartość lm
dla regresji
liniowej, rlm
dla regresji odpornej (dla rlm
konieczne jest dodanie pakietu MASS
), loess
lokalnie wygładzana wielomianami (domyślna).
4 Mechanizm warunkowania w ggplot2
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.
4.1 Zadanie
Jaki efekt/zadanie/działanie ma w poniższym przykładzie statystyka
stat_ellipse
? Zapytać wujka Google co to jest “confidence
ellipse”
4.2 Warunkowanie - przykłady
Panel typu facet_grid( ~b)
to 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 facte_grid( a~.)
podział w wierszach na
podstawie czynnika a
. UWAGA: ta kropka
jest obowiązkowa w tej konfiguracji!
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)
4.2.1 Zadanie - kolorowe kropki
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. Skąd biorą
się kropki koloru lightblue
?
5 Modyfikowanie wykresu
Pakiet ggplot2
umożliwia kontrolę nad wieloma elementami
wykresu
5.1 Modyfikowanie wykresu
za pomocą scale
Uwaga: ze scale korzystaliśmy też przy tworzeniu legendy do f. trygonometrycznych.
Modyfikowanie automatycznych ustawień wykresu może zostać wykonane za
pomocą “skali” (eng. scale). Np. scale_shape_xxxx
służy zmianie kształtu znacznika:
Pierwsza modyfikacja, zamiana znaczników na litery:
Inna modyfikacja, puste znaczniki:
Aby zobaczyć listę możliwych modyfikacji wystarczy zacząć wpisawanie
w kodzie R lub w konsoli np. scale_shape_
i poczekać na
autouzupełnianie komendy.
Inne przykłady:
rys2+scale_x_continuous(breaks=c(10,20,21,22), limits=c(5,25)) # linie pomocnicze plus zmiana zakresu na osi
5.2 Modyfikacja układu współrzędnych i osi
rys3=ggplot(countries, aes(x=birth.rate, y=death.rate))+
geom_point()+geom_smooth(se=FALSE,size=2)
rys3
Funkcje zmieniające układ współrzędnych:
coord_cartesian()
coord_flip()
coord_polar()
coord_equal()
coord_map()
coord_trans()
5.2.1 Zadanie
sprawdzić w pomocy działanie i parametry powyższych transformacji
5.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:
Więcej motywów w pakiecie ggthemes
Możemy też zmienić wybrane elementy wykresu. Wykres podstawowy:
ggplot()+
geom_point(data=countries, aes(x=birth.rate, y=death.rate, color=continent))+
labs(title="Podstawowy wykres")
i kolejne modyfikacje poprzez themes
(w nawiasie kolejne
opcje) - przetestować działanie:
ggplot()+
geom_point(data=countries, aes(x=birth.rate, y=death.rate, color=continent))+
labs(title="Zmienione parametry tytułu")+
theme(
plot.title = element_text(face = "bold", size = (25),color="steelblue")
)
6 Zadania
6.1 Zadanie - modyfikowanie wykresu
UWAGA: w zadaniu chodzi o zmodyfikowanie wybranych
elementów wykresu. Nie jest istotne, czy kolor będzie red
czy lightcyan
, albo czy rozmiar czcionki to 14 czy 16.
Dla uproszczenia (kopiuj/wklej) stworzymy 2 ramki danych i wykres “podstawowy”
x1=seq(0,2*pi,by=0.05)
y1=sin(x1)
y2=2*cos(x1)
x2=seq(0,2*pi, by=pi/2)
y3=sin(x2)
ramka_ciag=data.frame(kol_x=x1, kol_sin = y1, kol_cos=y2)
ramka_dyskr=data.frame(kol_x=x2, kol_y=y3)
#------------ wykres podstawowy
ggplot()+
geom_line(data=ramka_ciag,aes(x=kol_x,y=kol_sin ,colour="k1"),linewidth=1 )+
geom_line(data=ramka_ciag,aes(x=kol_x,y=kol_cos, colour="k2"),linewidth=1) +
geom_point(data=ramka_dyskr,aes(x=kol_x,y=kol_y,colour="dyskretne"),size=5,pch="x")+
scale_color_manual(name = "Legenda", values = c("k1" = "darkblue","k2" = "red","dyskretne"="darkgreen"))
6.1.1 Zadanie (a) - dodajemy modyfikacje
zmieniamy/dodajemy tytuł wykresu, podtytuł, etykiety osi, podpis za pomocą
labs
.Przydatne linki:
https://www.datanovia.com/en/blog/ggplot-title-subtitle-and-caption/
https://www.datanovia.com/en/blog/ggplot-legend-title-position-and-labels/
zmieniamy zakres wartości na osi “y” oraz znaczniki na osi “x” za pomocą
scale_x_…
itp.Pomocne:
W efekcie powinniśmy dostać wykres podobny do:
6.1.2 Zadanie (b) - modyfikujemy czcionki
Zmodyfikować wygląd czcionek (kolor, rozmiar, pogrubienie) poprzez
themes
tak, aby uzyskać efekt jak na rysunku niżej - można
oczywiście użyć innych kolorów lub rozmiaru. Przydatne linki:
https://environmentalcomputing.net/graphics/ggplot/ggplot-labels/
6.1.3 Zadanie (c) - modyfikujemy tło
Zmienić kolor tła, główne linie siatki, pomocnicze linie siatki,
obramowanie poprzez themes
tak, aby uzyskać efekt jak
niżej. Kolory można dobrać własne (mój efekt nie jest zbyt estetyczny).
Tym razem bez linków 👹, nazwy parametrów do zmiany to:
panel.border
panel.background
panel.grid.major
panel.grid.minor
Wskazówka: wyszukać w google…
6.2 Zadanie 2 - “rozkład normalny”
Ponownie 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)+
labs(caption="źródło inspiracji - dr K.N.")+
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'))
6.2.1 Zadanie (a) - modyfikacja osi
Za pomocą theme
zmodyfikować osie wykresu:
większa czcionka przy etykietach osi
obrócenie etykiet osi “y”
usunięcie nazw osi
tak aby zyskać efekt:
6.2.2 Zadanie (b) - modyfikacja tła
Jak w zadaniu wyżej, zmienić kolor tła, główne linie siatki,
pomocnicze linie siatki, obramowanie poprzez themes
tak,
aby uzyskać efekt jak niżej. Tym razem bez linków 👹, nazwy parametrów
do zmiany to:
panel.border
panel.background
panel.grid.major
panel.grid.minor
Efekt powinien przypominać:
6.2.3 Zadanie (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
6.3 Zadanie - “wiatr”
Wczytamy dane (tym razem ze strony www)
wiatry=read.csv("https://home.agh.edu.pl/~bras/R/wiatr.csv", sep=";")
wiatry$sector=as.factor(wiatry$sector) # zmiana typu danych. Ta zmienna jest wczytywana przez R jako 'char' a przydatniejsze jest interpretowanie jej jako zmienną jakościową
head(wiatry)
## date anemo_80m anemo_60m anemo_40m kierunek_80m sector
## 1 2010-08-01 00:00:00 4.6 5.3 4.8 62 E
## 2 2010-08-01 00:10:00 4.7 4.8 4.8 69 E
## 3 2010-08-01 00:20:00 5.1 4.8 4.5 83 E
## 4 2010-08-01 00:30:00 5.5 4.4 3.1 93 E
## 5 2010-08-01 00:40:00 5.0 3.8 2.6 89 E
## 6 2010-08-01 00:50:00 4.2 3.3 2.3 92 E
Jest to zredukowany zbiór danych pomiarowych z poprzednich ćwiczeń,
zawiera jedynie wybrane wartości wskazań prędkości wiatru oraz kierunku.
Dane zostały rozszerzone o zmienną jakościową sector
,
wyliczoną na podstawie wskazań kierunku wiatru. W skrócie jest to mocno
uproszczona “róża wiatrów” ograniczona do 4 kierunków głównych.
spoiler alert - budowa podobnej ramki z sektorem to część
projektu.
Podstawowy wykres:
6.3.1 Zadanie (a) - panele
Podzielić za pomocą warunkowania powyższy wykres na 4 panele odpowiadające sektorom. Nadać zmiennym swoje ulubione kolory. Powinniśmy dostać coś takiego:
6.3.2 Zadanie (b) - małe modyfikacje
za pomocą theme usunąć legendę (lub w inny sposób)
zmniejszyć rozmiar kropek
6.3.3 Zadanie (c) - stat_ellipse
Wykorzystać stat_ellipse
do narysowania elips na
panelach wykorzystując różne wartości jej argumentu
level
(odesłać 2 przykłady). Kolor można zmienić np. na
czarny (żeby było widać elipsy). Np dla level=0.5
dostaniemy: