Projekt R

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.