Wykres punktowy w R przy użyciu ggplot2 (z przykładem)
Wykresy stanowią trzecią część procesu analizy danych. Pierwsza część dotyczy ekstrakcja danych, o czym traktuje druga część czyszczenie i manipulowanie danymi. W końcu analityk danych może tego potrzebować przedstawić swoje wyniki w formie graficznej.
Pracę naukowca zajmującego się danymi można przedstawić na poniższym obrazku
- Pierwszym zadaniem analityka danych jest zdefiniowanie pytania badawczego. To pytanie badawcze zależy od celów i założeń projektu.
- Następnie jednym z najważniejszych zadań jest inżynieria funkcji. Analityk danych musi gromadzić dane, manipulować nimi i je czyścić
- Po zakończeniu tego kroku może rozpocząć eksplorację zbioru danych. Czasami ze względu na nowe odkrycie konieczne jest udoskonalenie i zmiana pierwotnej hipotezy.
- Podczas wyjaśniający analiza danych zostanie osiągnięta, badacz danych musi wziąć pod uwagę możliwości czytelnika zrozumieć podstawowe koncepcje i modele.
- Jego wyniki należy przedstawić w formacie zrozumiałym dla wszystkich zainteresowanych stron. Jedna z najlepszych metod komunikować wyniki są przez a wykres.
- Wykresy są niesamowitym narzędziem pozwalającym na uproszczenie złożonych analiz.
pakiet ggplot2
Ta część samouczka skupia się na tworzeniu wykresów/wykresów za pomocą języka R.
W tym samouczku będziesz używać pakietu ggplot2. Pakiet ten opiera się na spójnych podstawach książki Gramatyka grafiki napisanej przez Wilkinsona w 2005 roku. ggplot2 jest bardzo elastyczny, zawiera wiele tematów i specyfikacji fabuły na wysokim poziomie abstrakcji. Dzięki ggplot2 nie można drukować grafiki trójwymiarowej i tworzyć grafiki interaktywnej.
W programie ggplot2 wykres składa się z następujących argumentów:
- dane
- mapowanie estetyczne
- obiekt geometryczny
- przekształcenia statystyczne
- waga
- system współrzędnych
- korekty pozycji
- fasetowanie
W samouczku dowiesz się, jak kontrolować te argumenty.
Podstawowa składnia ggplot2 to:
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Wykres punktowy
Zobaczmy, jak ggplot współpracuje ze zbiorem danych mtcars. Zaczynasz od wykreślenia wykresu rozrzutu zmiennej mpg i zmiennej drat.
Podstawowy wykres punktowy
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Objaśnienie kodu
- Najpierw przekazujesz zbiór danych mtcars do ggplot.
- Wewnątrz argumentu aes() dodajesz oś x i oś y.
- Znak + oznacza, że chcesz, aby R nadal czytał kod. Kod staje się bardziej czytelny, ponieważ go łamie.
- Użyj geom_point() dla obiektu geometrycznego.
Wyjście:
Wykres punktowy z grupami
Czasami interesujące może być rozróżnienie wartości na podstawie grupy danych (tj. danych na poziomie czynnika).
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Objaśnienie kodu
- Funkcja aes() wewnątrz funkcji geom_point() kontroluje kolor grupy. Grupa powinna być zmienną czynnikową. W ten sposób przekształcasz zmienne biegi we współczynnik.
- W sumie masz kod aes(color = Factor(Gear)), który zmienia kolor kropek.
Wyjście:
Zmień oś
Przeskalowanie danych to duża część pracy analityka danych. W rzadkich przypadkach dane mają ładny kształt dzwonu. Jednym ze sposobów zmniejszenia wrażliwości danych na wartości odstające jest ich przeskalowanie.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Objaśnienie kodu
- Zmienne x i y przekształcasz w log() bezpośrednio w mapowaniu aes().
Należy zauważyć, że można zastosować dowolną inną transformację, taką jak standaryzacja lub normalizacja.
Wyjście:
Wykres punktowy z dopasowanymi wartościami
Do wykresu można dodać inny poziom informacji. Można wykreślić dopasowaną wartość regresji liniowej.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear))) + stat_smooth(method = "lm", col = "#C42126", se = FALSE, size = 1) my_graph
Objaśnienie kodu
- graph: Przechowujesz swój graph w zmiennej graph. Jest to pomocne do dalszego wykorzystania lub uniknięcia zbyt złożonych linii kodów
- Argument stat_smooth() steruje metodą wygładzania
- metoda = „lm”: Regresja liniowa
- col = „#C42126”: Kod czerwonego koloru linii
- se = FALSE: Nie wyświetlaj błędu standardowego
- size = 1: rozmiar linii wynosi 1
Wyjście:
Należy pamiętać, że dostępne są inne metody wygładzania
- glm
- gam
- less: wartość domyślna
- obręcz
Dodaj informacje do wykresu
Do tej pory nie dodaliśmy informacji do wykresów. Wykresy muszą być informacyjne. Czytelnik powinien zobaczyć historię stojącą za analizą danych, po prostu patrząc na wykres, bez odwoływania się do dodatkowej dokumentacji. Dlatego wykresy potrzebują dobrych etykiet. Możesz dodać etykiety za pomocą funkcji labs().
Podstawowa składnia lab() jest następująca:
lab(title = "Hello Guru99") argument: - title: Control the title. It is possible to change or add title with: - subtitle: Add subtitle below title - caption: Add caption below the graph - x: rename x-axis - y: rename y-axis Example:lab(title = "Hello Guru99", subtitle = "My first plot")
Dodaj tytuł
Obowiązkową informacją, którą należy dodać, jest oczywiście tytuł.
my_graph + labs( title = "Plot Mile per hours and drat, in log" )
Objaśnienie kodu
- my_graph: Używasz zapisanego wykresu. Pozwala to uniknąć przepisywania wszystkich kodów za każdym razem, gdy dodajesz nowe informacje do wykresu.
- Zawijasz tytuł wewnątrz laboratorium().
- Kod czerwonego koloru linii
- se = FALSE: Nie wyświetlaj błędu standardowego
- size = 1: rozmiar linii wynosi 1
Wyjście:
Dodaj tytuł z dynamiczną nazwą
Tytuł dynamiczny jest pomocny w dodaniu bardziej precyzyjnych informacji w tytule.
Funkcji paste() można używać do drukowania tekstu statycznego i tekstu dynamicznego. Podstawowa składnia paste() jest następująca:
paste("This is a text", A) arguments - " ": Text inside the quotation marks are the static text - A: Display the variable stored in A - Note you can add as much static text and variable as you want. You need to separate them with a comma
Przykład:
A <-2010 paste("The first year is", A)
Wyjście:
## [1] "The first year is 2010"
B <-2018 paste("The first year is", A, "and the last year is", B)
Wyjście:
## [1] "The first year is 2010 and the last year is 2018"
Do naszego wykresu możesz dodać dynamiczną nazwę, a mianowicie średnią mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Objaśnienie kodu
- Tworzysz średnią mpg za pomocą średniej (mtcars$mpg) zapisanej w zmiennej mean_mpg
- Używasz funkcji paste() z mean_mpg, aby utworzyć dynamiczny tytuł zwracający średnią wartość mpg
Wyjście:
Dodaj podtytuł
Dwa dodatkowe szczegóły mogą sprawić, że Twój wykres będzie bardziej przejrzysty. Mówisz o podtytule i podpisie. Podtytuł znajduje się tuż pod tytułem. Podpis może informować o tym, kto wykonał obliczenia i o źródle danych.
my_graph + labs( title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Objaśnienie kodu
- Wewnątrz laboratorium() dodałeś:
- title = „Związek między milą na godzinę a drat”: Dodaj tytuł
- subtitle = „Podział relacji według klasy sprzętu”: Dodaj podtytuł
- caption = „Własne obliczenia autora: Dodaj podpis
- Każdą nową informację oddzielasz przecinkiem, ,
- Pamiętaj, że łamiesz linie kodu. Nie jest to obowiązkowe, a jedynie pomaga w łatwiejszym czytaniu kodu
Wyjście:
Zmień nazwę osi X i Y
Same zmienne w zestawie danych nie zawsze mogą być jawne lub zgodnie z konwencją używać _, gdy jest wiele słów (np. GDP_CAP). Nie chcesz, aby taka nazwa pojawiała się na wykresie. Ważne jest, aby zmienić nazwę lub dodać więcej szczegółów, takich jak jednostki.
my_graph + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Objaśnienie kodu
- Wewnątrz laboratorium() dodałeś:
- x = „Definicja pochylenia”: Zmień nazwę osi X
- y = „Mila na godzinę”: Zmień nazwę osi y
Wyjście:
Kontroluj wagę
Możesz kontrolować skalę osi.
Funkcja seq() jest wygodna, gdy trzeba utworzyć ciąg liczb. Podstawowa składnia to:
seq(begin, last, by = x) arguments: - begin: First number of the sequence - last: Last number of the sequence - by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
Na przykład, jeśli chcesz utworzyć zakres od 0 do 12 z krokiem 3, będziesz mieć cztery liczby: 0 4 8 12
seq(0, 12,4)
Wyjście:
## [1] 0 4 8 12
Możesz kontrolować skalę osi X i Y, jak poniżej
my_graph + scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) + scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Objaśnienie kodu
- Funkcja Scale_y_continuous() steruje osi y
- Funkcja Scale_x_continuous() steruje oś x.
- Parametr breaks steruje podziałem osi. Możesz ręcznie dodać sekwencję liczb lub użyć funkcji seq():
- seq(1, 3.6, by = 0.2): Utwórz sześć liczb od 2.4 do 3.4 z krokiem 3
- seq(1, 1.6, by = 0.1): Utwórz siedem liczb od 1 do 1.6 z krokiem 1
Wyjście:
Motyw
Wreszcie R pozwala nam dostosować fabułę za pomocą różnych motywów. Biblioteka ggplot2 zawiera osiem motywów:
- motyw_bw()
- światło_motywu()
- klasa_motywu()
- motyw_linedraw()
- motyw_ciemny()
- temat_minimalny()
- motyw_szary()
- motyw_pustki()
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Wyjście:
Zapisz działki
Po wykonaniu wszystkich tych kroków nadszedł czas na zapisanie i udostępnienie wykresu. Dodajesz ggsave('NAZWA PLIKU) zaraz po wykreśleniu wykresu i zostanie on zapisany na dysku twardym.
Wykres zostaje zapisany w katalogu roboczym. Aby sprawdzić katalog roboczy, możesz uruchomić ten kod:
directory <-getwd() directory
Narysujmy Twój fantastyczny wykres, zapiszmy go i sprawdźmy lokalizację
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Wyjście:
ggsave("my_fantastic_plot.png")
Wyjście:
## Saving 5 x 4 in image
Note: Wyłącznie do celów pedagogicznych stworzyliśmy funkcję o nazwie open_folder(), która umożliwia otwarcie folderu katalogu. Wystarczy uruchomić poniższy kod i sprawdzić, gdzie przechowywany jest obraz. Powinieneś zobaczyć plik o nazwie my_fantastic_plot.png.
# Run this code to create the function open_folder <- function(dir) { if (.Platform['OS.type'] == "windows") { shell.exec(dir) } else { system(paste(Sys.getenv("R_BROWSER"), dir)) } } # Call the function to open the folder open_folder(directory)
Podsumowanie
Podsumowanie argumentów potrzebnych do utworzenia wykresu punktowego można znaleźć w poniższej tabeli:
Cel | Code |
---|---|
Podstawowy wykres punktowy |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
Wykres punktowy z grupą kolorów |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
Dodaj dopasowane wartości |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
Dodaj tytuł |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
Dodaj napisy |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
Zmień nazwę x |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
Zmień nazwę y |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
Kontroluj skalę |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1) |
Utwórz dzienniki |
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point() |
Motyw |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
Zapisz |
ggsave("my_fantastic_plot.png") |