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ę:
1 |
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:
1 |
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:
1 |
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:
1 |
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:
1 |
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:
1 |
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:
1 |
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:
1 |
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:
1 |
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:
1 |
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:
1 2 |
library(tidyr) data_new = gather(data,"week","distance",2:5) |
Tak przygotowane dane możemy wyświetlić na wykresie słupkowym:
1 |
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:
1 |
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:
1 2 3 |
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:
1 2 3 4 |
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:
1 |
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:
1 |
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:
1 |
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:
1 2 |
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.