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 puzli). 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 wszytkim 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:
Teoretycznie wszystko można pisać “ciągiem”, jednak zasada “jedno polecenie/geometria - jedna linijka” zwiększa czytelność.
2 Warstwy
Na początku musisz przekazać ramkę danych do funkcji
ggplot i określić aes, czyli estetyki, które
określają zmienne mapowania.
library(ggplot2)
x=seq(0,10, by=0.1)
y=sin(x)
z=cos(x)
df <- data.frame(time=x,sin=y,cos=z) # Tworzymy ramkę danych
ggplot(df, aes(x = sin, y = cos))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:
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_rectprostoką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
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
?goem_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. Następnie 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 ase() dodamy więcej ustawień
estetyki to utworzy nam się więcej legend. Zauważmy, że najładniej 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, jednak w legendzie nie niebieska linia nie jest przerywana. Czyli nie dziedziczymy typu linii. Dlatego też raczej unikajmy tego sposobu.
Tworzenie legendy z powyższych przykładów wydaje się zadaniem bardzo
nieprzyjemnym i uciążliwym w szczególności, gdy będziemy chcieli uzyskać
więcej krzywych o różnym stylu, a nie tylko dwie. Dlatego też,
przedstawimy alternatywny sposób tworzenia legendy, który według nas
jest wygodniejszy i łatwiejszy w zrozumieniu. Wymaga jednak modyfikacji
ramki danych za pomocą funkcji melt(), która jest dostępna
w bibliotece reshcape2.
Funkcja melt() przekształca dane do dłuższego formatu,
pozostawiając kolumny określone w parametrze id jako
identyfikatory (w naszym przypadku będzie to time),a
wszystkie pozostałe kolumny są przekształcane w dwie kolumny:
variable i value. Kolumna
variable będzie zawierała nazwy oryginalnych zmiennych
(sin i cos), a kolumna value
będzie zawierała odpowiadające im wartości.
Wtedy przyjemniej tworzy nam się legenda, dla której możemy ustali color i typ linii w następujący sposób.
library(reshape2)
df_melted <- melt(df, id=c("time"))
ggplot(df_melted, aes(x=time, y=value, color=variable, linetype=variable))+
geom_line()+
scale_color_manual(values=c("sin" = "red", "cos" = "blue"))2.4 Tworzenie adnotacji
Aby zmodyfikować nazwę wykres, osi, legendę można użyć funkcji
labs(). Np:
ggplot(df, aes(x=time,y=cos))+
geom_line(color="red")+
geom_line(aes(x=time,y=cos), color="blue")+
labs(title="Wykres funkcji trygonometrycznyc",
x="Dziedzina",
y="Wartości")2.5 Statystyki i agregacje
Każda warstwa ma określony dodatkowy atrybut - statystykę, czyli funkcję agregującą dane:
- np. dla wykresu punktowego statystyka ta to funkcja identycznościowa, czyli “nic nie robi”
- np. dla wykresu słupkowego
geom_bardomyślnie wywołuję statystykęstat_count:
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:
Wykres punktowy plus trend wraz z przedziałami ufności:
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
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ć prosta była wyrysowywana z wykorzystaniem regresji
liniowej.
#Przetestuj poniższy kod
ggplot(df, aes(time, sin))+
geom_point()+
geom_smooth(se=FALSE, method='lm')# bez przedziałów ufnościArgument method może mieć wartość lm dla
regresji liniowej, rlm dla regresji odpornej,
loess lokalnie wygładzana wielomianami (domyślna).
Zadanie:
Wypróbować w powyższym przykładzie metodę rlm oraz inne
argumenty dla funkcji geom_smooth takie jak
span i formula - sprawdzić w pomocy do czego
służą.
###ODPOWIEDŹ
library(MASS)
ggplot(df, aes(time, sin))+
geom_point()+
geom_smooth(se=FALSE, method = 'loess', span = 0.2)
# Wygładzanie przy użyciu lokalnego wygładzania loess z bardziej szczegółowym wygładzaniem (span = 0.2).
ggplot(df, aes(time, sin)) +
geom_point() +
geom_smooth(se = FALSE, method = MASS::rlm) #Wygładzanie przy użyciu odpornej metody regresji rlm z pakietu MASS.
ggplot(df, aes(time, sin)) +
geom_point() +
geom_smooth(se = FALSE, method = 'lm', formula = y ~poly(x,2)) #wygładzanie przy użyciu regresji liniowej lm z formułą dla wielomianu drugiego stopnia.Można dodać też inne parametry, jak kolor warstwy itp:
2.6 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 zestawu danych countries z
pakietu Przewodnik.
## Loading required package: PogromcyDanych
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Loading required package: SmarterPoland
## Loading required package: httr
## Loading required package: htmltools
## Loading required package: PBImisc
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 color
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 w inny sposób. Użyjemy innej
geometrii geom_violin która tworzy wykres skrzypcowy. Są
one wygodne do wizualizacji danych ze względu na różne kategorie. Są
podobne do boxplotów.
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.6.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().
# 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.7 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.
Zadanie: jaki efekt/zadanie/działanie ma w poniższym
przykładzie statystyka stat_ellipse?
Zadanie: zapytać wujka Google co to jest “confidence ellipse”
2.8 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 czynnikaafacet_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)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 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
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 osi3.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 1 - profil pionowy i 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”
#---------------utworzenie dwóch funkcji--------------------
#---------------powinny być znane z poprzedniego laboratorium
#---------------można przekopiować, żeby móc działać
v_hell=function(h)
{4.786089*(h/40.9)^0.267734
}
v_log = function(h)
{4.786089*log(h/1.356629)/log(40.9/1.356629)
}
#------------dane do wykresów
wysokosci_pomiar=c(40.9,60.9,80.9)
predkosci_pomiar=c(4.786089,5.296304,5.739292)
h=c(10:130)
ramka_wzorki=data.frame(wysokosci=h,Vhell=v_hell(h),Vlog=v_log(h))
ramka_pomiar=data.frame(wysokosci=wysokosci_pomiar,predkosci=predkosci_pomiar)#------------ wykres podstawowy
ggplot()+
geom_line(data=ramka_wzorki,aes(x=wysokosci,y=Vhell ,colour="Vhell"),linewidth=1 )+
geom_line(data=ramka_wzorki,aes(x=wysokosci,y=Vlog,colour="Vlog"),linewidth=1) +
geom_point(data=ramka_pomiar,aes(x=wysokosci,y=predkosci,colour="dane z pomiaru"),size=5,pch="x")+
scale_color_manual(name = "Legenda", values = c("Vhell" = "darkblue","Vlog" = "red","dane z pomiaru"="darkgreen"))4.1.1 Zadanie 1a - 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:
4.1.2 Zadanie 1b - 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/
4.1.3 Zadanie 1c - 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…
4.2 Zadanie 2 - wykres i jego modyfikacje
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)+
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.2.1 Zadanie 2a - 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:
4.2.2 Zadanie 2b - 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ć:
4.2.3 Zadanie 2c - modyfikacja legendy
Teraz zmieniamy poprzez themes:
rozmiar czcionki tytułu legendy - tutaj tekstu “opis”,
legend.titlerozmiar czcionki elementów legendy,
legend.textwyrównanie tekstu “opis” na środkowe (center),
legend.title.alignpołożenie legendy - ma być wewnątrz wykresu,
legend.positionramka wokół legendy, kolorowa, pogrubiona,
legend.box.backgroundtło legendy pod znacznikami, tutaj jest
cyani bardzo daje po oczach. Lepiej dać np.lightbluejednolity z resztą tła,legend.keytło legendy, tutaj
lightblue,legend.background
## Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The `legend.title.align` argument of `theme()` is deprecated as of ggplot2
## 3.5.0.
## ℹ Please use theme(legend.title = element_text(hjust)) instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: A numeric `legend.position` argument in `theme()` was deprecated in ggplot2
## 3.5.0.
## ℹ Please use the `legend.position.inside` argument of `theme()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Zadanie 3
Wczytamy dane, podział na 4 sektory kierunków jak na poprzednich zajęciach (kopiuj/wklej):
library(readxl)
#dane_w2 <- read_excel("C:/costam/costam/dane_w2.xlsx",
# col_types = c("date", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric", "numeric", "numeric",
# "numeric"))
sektor=NULL
sektor[which(dane_w2$CH7Avg<=45 | dane_w2$CH7Avg>315)]="N"
sektor[which(dane_w2$CH7Avg>45 & dane_w2$CH7Avg<=135)]="E"
sektor[which(dane_w2$CH7Avg>135 & dane_w2$CH7Avg<=225)]="S"
sektor[which(dane_w2$CH7Avg>225 & dane_w2$CH7Avg<=315)]="W"
wiatry=data.frame(date=dane_w2$`Date & Time Stamp`,anemo_80m=dane_w2$CH4Avg,anemo_60m=dane_w2$CH5Avg,anemo_40m=dane_w2$CH6Avg,kierunek_80m=dane_w2$CH7Avg,sector=sektor)
#head(wiatry)Podstawowy wykres:
4.2.4 Zadanie 3a - panele
Podzielić za pomocą warunkowania powyższy wykres na 4 panele odpowiadające sektorom. Powinniśmy dostać coś takiego:
Przy okazji zmieniliśmy kolory z automatycznych na wybrane, tutaj za
pomocą
scale_color_manual(values=c("#125333", "#E69F00", "#56B4E9","#877214")).
Ciekawostka: powyżej kolory podane są w kodzie HEX . Przykładowa strona, gdzie można wybrać kolor i otrzymać jego numer to:
4.2.5 Zadanie 3b - małe modyfikacje
za pomocą theme usunąć legendę (lub w inny sposób)
zmniejszyć rozmiar kropek
4.2.6 Zadanie 3c - stat_ellipse
Wykorzystać stat_ellipse do narysowania elips na
panelach wykorzystując różne wartości jej argumentu level.
(kilka wartości, kilka wykresów). Kolor można zmienić np. na czarny
(żeby było widać elipsy). Np dla level=0.5 dostaniemy: