GGPlot2 – jak zrobić wykres
W poprzednich postach dowiedzieliśmy się jak manipulować danymi. Dzisiaj zapoznamy się z biblioteką ggplot2 do prezentacji danych na wykresach. Zainicjujmy bibliotekę:
library(ggplot2)
Wykresy punktowe
Przygotujmy dane do pierwszej wizualizacji. Będzie to lista współrzędnych poszukiwań na polu o kształcie kwadratu, gdzie znaleźliśmy 1000 obiektów:
data = data.frame(x = as.integer(runif(1000,1,30)), y = as.integer(runif(1000,1,30)))
Korzystając z biblioteki ggplot wyświetlimy ich współrzędne na wykresie puktowym z użyciem geom_point:
ggplot(data = data,aes(x,y)) + geom_point()
W kilku miejscach znaleźliśmy kilka obiektów, więc mają te same współrzędne. Do prezentacji dublujących się danych lepiej jest użyć geom_jitter, który nieznacznie zmienia wartości pozwalająć na „rozstrzelenie” punktów:
ggplot(data = data,aes(x,y)) + geom_jitter()
Wykres jest bardziej czytelny. Do prezentacji nakładających się danych wykorzystać można jeszcze inne narzędza ggplot, ale ich poszukiwania pozostawiamy Wam.
Do wyświetlenia histogramów służy funkcja geom_histogram, dla której możemy określić szerokość zakresu (binwidth). Zobaczmy, gdzie w kierunku na północ było najwięcej obiektów:
ggplot(data = data,aes(x)) + geom_histogram(binwidth = 2)
Wykresy słupkowe
Innym typem często używanych wykresów są wykresy słupkowe. Przygotujmy dane zawierające imiona i dystans jakie poszczególne osoby przebiegły w ciągu czterech tygodni:
data = data.frame(name = c("John","Barbara","Sophia","Jack","David","Kris","Walt","Bruce"), week1_km = runif(8,1,100),week2_km = runif(8,1,100),week3_km = runif(8,1,100),week4_km = runif(8,1,100))
Dystanse z pojedynczego tydzienia wyświetlamy na wykresie korzystając z geom_bar:
ggplot(data = data,aes(name,week1_km)) + geom_bar(stat = "identity")
Za pomocą atrybutów color i fill możemy zmienić wygląd słupków:
ggplot(data = data,aes(name,week1_km)) + geom_bar(stat = "identity",color = "red",fill = "yellow")
Xlab, ylab zmieni opisy osi, a ggtitle doda nazwę do wykresu:
ggplot(data = data,aes(name,week1_km)) + geom_bar(stat = "identity",color = "red",fill = "yellow") + xlab("NAME") + ylab("WEEK DISTANCE [km]") + ggtitle("RUNNING DISTANCE")
Wygląd wykresu szybko zmienimy korzystając z domyślnych szablonów, np. theme_grey, theme_light:
ggplot(data = data,aes(name,week1_km)) + geom_bar(stat = "identity") + theme_light()
Na wykresach słupkowych możemy grupować dane np. po imieniu. Najpierw jednak musimy je przeformatować korzystając z narzędzia gather z biblioteki tidyr:
library(tidyr)
data_new = gather(data,"week","distance",2:5)
Tak przygotowane dane możemy wyświetlić na wykresie słupkowym:
ggplot(data = data_new,aes(name,distance)) + geom_bar(stat = "identity",aes(fill=week))
Powyżej na wykresie dystanse z tygodni przyrastają, ale zmieniając atrybut postition na „dodge” – słupki dla poszczególnych tygodni będą prezentowane obok siebie:
ggplot(data = data_new,aes(name,distance)) + geom_bar(stat = "identity",position = "dodge",aes(fill=week))
Opisy osi i nazwę wykresu dodajemy lub zmieniamy używając labs:
ggplot(data = data_new,aes(name,distance)) +
geom_bar(stat = "identity",position = "dodge",aes(fill=week)) +
labs(title = "Plot",x = "NAME", y="DISTANCE (km)")
Położenie legendy zmienimy theme:
ggplot(data = data_new,aes(name,distance)) +
geom_bar(stat = "identity",position = "dodge",aes(fill=week)) +
labs(title = "Plot",x = "NAME", y="DISTANCE (km)") +
theme(legend.position = "bottom")
Box plots
Na koniec zrobimy jeszcze box ploty na nowych danych. Wygenerujmy dystanse przebiegnięte przez 8 osób w 30 dniach:
data = data.frame(name = rep(c("John","Barbara","Sophia","Jack","David","Kris","Walt","Bruce"),30), distance = runif(30*8,3,20))
I wyświetlmy je na boxplocie:
ggplot(data = data,aes(name,distance)) + geom_boxplot()
Zapis wykresów do pliku
Do zapisu naszych wykresów do zewnętrznego pliku („eps”, „ps”, „tex”, „pdf”, „jpeg”, „tiff”, „png”, „bmp”, „svg” „wmf”) używamy ggsave:
ggsave("D:/ggplot_boxplot.png", width = 5, height = 5)
Domyślnie funkcja zapisuje ostatni wyświetlony wykres. Zapis konkretnego wykresu odbywa się poprzez przypisanie go do zmiennej i wstawienie jej do funkcji ggsave:
plot1 = ggplot(data = data,aes(x,y)) + geom_point()
ggsave("D:/plot.pdf", plot1, width = 5, height = 5)
Biblioteka ggplot ma wiele funkcji i opisujących je atrybutów. Wszystkie te narzędzia pozwalają tworzyć zaawasowane wykresy. Poszukiwanie bardziej złożonych rozwiązań pozostawiamy Wam. Podstawy już macie.