Graficul de dispersie în R folosind ggplot2 (cu Exemplu)
Graficele reprezintă a treia parte a procesului de analiză a datelor. Prima parte este despre extragerea datelor, partea a doua tratează curățarea și manipularea datelor. În cele din urmă, cercetătorul de date poate avea nevoie comunica grafic rezultatele sale.
Munca cercetătorului de date poate fi revizuită în imaginea următoare
- Prima sarcină a unui cercetător de date este să definească o întrebare de cercetare. Această întrebare de cercetare depinde de obiectivele și scopurile proiectului.
- După aceea, una dintre cele mai importante sarcini este ingineria caracteristicilor. Specialistul de date trebuie să colecteze, să manipuleze și să curețe datele
- Când acest pas este finalizat, el poate începe să exploreze setul de date. Uneori, este necesar să rafinați și să schimbați ipoteza inițială datorită unei noi descoperiri.
- Cand explicativ analiza este realizată, cercetătorul de date trebuie să ia în considerare capacitatea cititorului de a înțelege conceptele și modelele care stau la baza.
- Rezultatele sale ar trebui să fie prezentate într-un format pe care toți părțile interesate să îl poată înțelege. Una dintre cele mai bune metode de a comunica rezultatele sunt prin a grafic.
- Graficele sunt un instrument incredibil de simplificare a analizelor complexe.
pachetul ggplot2
Această parte a tutorialului se concentrează pe cum să faci grafice/diagrame cu R.
În acest tutorial, veți folosi pachetul ggplot2. Acest pachet este construit pe baza consecventă a cărții Grammar of graphics scrisă de Wilkinson, 2005. ggplot2 este foarte flexibil, încorporează multe teme și specificații ale intrării la un nivel ridicat de abstractizare. Cu ggplot2, nu puteți reprezenta grafică tridimensională și nu puteți crea grafică interactivă.
În ggplot2, un grafic este compus din următoarele argumente:
- de date
- cartografiere estetică
- obiect geometric
- transformări statistice
- cântare
- sistem de coordonate
- ajustări de poziție
- fațetare
Veți învăța cum să controlați aceste argumente în tutorial.
Sintaxa de bază a lui ggplot2 este:
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()`
Scatterplot
Să vedem cum funcționează ggplot cu setul de date mtcars. Începeți prin a reprezenta un grafic de dispersie a variabilei mpg și a variabilei drat.
Graficul de dispersie de bază
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Explicarea codului
- Mai întâi treceți setul de date mtcars la ggplot.
- În argumentul aes(), adăugați axa x și axa y.
- Semnul + înseamnă că doriți ca R să citească în continuare codul. Face codul mai lizibil prin spargerea lui.
- Utilizați geom_point() pentru obiectul geometric.
ieșire:
Graficul de dispersie cu grupuri
Uneori, poate fi interesant să distingem valorile după un grup de date (adică date la nivel de factor).
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Explicarea codului
- Aes() din interiorul geom_point() controlează culoarea grupului. Grupul ar trebui să fie o variabilă factor. Astfel, convertiți angrenajul variabil într-un factor.
- În total, aveți codul aes(culoare = factor(gear)) care schimbă culoarea punctelor.
ieșire:
Schimbați axa
Redimensionarea datelor este o mare parte a muncii de data scientist. În cazuri rare, datele vin într-o formă frumoasă de clopot. O soluție pentru a vă face datele mai puțin sensibile la valori aberante este să le redimensionați.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Explicarea codului
- Transformați variabilele x și y în log() direct în maparea aes().
Rețineți că orice altă transformare poate fi aplicată, cum ar fi standardizarea sau normalizarea.
ieșire:
Graficul de dispersie cu valori ajustate
Puteți adăuga un alt nivel de informații la grafic. Puteți reprezenta grafic valoarea ajustată a unei regresii liniare.
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
Explicarea codului
- grafic: vă stocați graficul în graficul variabil. Este util pentru utilizare ulterioară sau pentru a evita linia prea complexă de coduri
- Argumentul stat_smooth() controlează metoda de netezire
- metoda = „lm”: regresie liniară
- col = „#C42126”: Cod pentru culoarea roșie a liniei
- se = FALSE: Nu afișați eroarea standard
- dimensiune = 1: dimensiunea liniei este 1
ieșire:
Rețineți că sunt disponibile și alte metode de netezire
- glm
- GAM
- loess: valoare implicită
- buză
Adăugați informații în grafic
Până acum, nu am adăugat informații în grafice. Graficele trebuie să fie informative. Cititorul ar trebui să vadă povestea din spatele analizei datelor doar uitându-se la grafic, fără a se referi la documentație suplimentară. Prin urmare, graficele au nevoie de etichete bune. Puteți adăuga etichete cu funcția labs().
Sintaxa de bază pentru lab() este:
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")
Adăugați un titlu
O informație obligatorie de adăugat este, evident, un titlu.
my_graph + labs( title = "Plot Mile per hours and drat, in log" )
Explicarea codului
- my_graph: Folosiți graficul pe care l-ați stocat. Evită rescrierea tuturor codurilor de fiecare dată când adăugați informații noi în grafic.
- Înveliți titlul în interiorul lab().
- Cod pentru culoarea roșie a liniei
- se = FALSE: Nu afișați eroarea standard
- dimensiune = 1: dimensiunea liniei este 1
ieșire:
Adăugați un titlu cu un nume dinamic
Un titlu dinamic este util pentru a adăuga informații mai precise în titlu.
Puteți utiliza funcția paste() pentru a imprima text static și text dinamic. Sintaxa de bază a paste() este:
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
Exemplu:
A <-2010 paste("The first year is", A)
ieșire:
## [1] "The first year is 2010"
B <-2018 paste("The first year is", A, "and the last year is", B)
ieșire:
## [1] "The first year is 2010 and the last year is 2018"
Puteți adăuga un nume dinamic graficului nostru, și anume media mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Explicarea codului
- Creați media mpg cu mean(mtcars$mpg) stocată în variabila mean_mpg
- Folosiți paste() cu mean_mpg pentru a crea un titlu dinamic care returnează valoarea medie a mpg
ieșire:
Adăugați un subtitlu
Două detalii suplimentare vă pot face graficul mai explicit. Vorbesti despre subtitrare si legenda. Subtitrarea merge chiar sub titlu. Legenda poate informa despre cine a efectuat calculul și sursa datelor.
my_graph + labs( title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Explicarea codului
- În interiorul laboratorului (), ați adăugat:
- title = „Relația dintre Mila pe oră și Drat”: Adăugați titlu
- subtitle = „Defalcarea relației în funcție de clasa de echipament”: Adăugați subtitrare
- legenda = „Calcul propriu al autorilor: Adăugați legenda
- Separați fiecare informație nouă cu o virgulă, ,
- Rețineți că rupeți liniile de cod. Nu este obligatoriu și ajută doar să citiți mai ușor codul
ieșire:
Redenumiți axa x și axa y
Variabilele în sine din setul de date ar putea să nu fie întotdeauna explicite sau prin convenție să folosească _ atunci când există mai multe cuvinte (adică GDP_CAP). Nu doriți să apară un astfel de nume în graficul dvs. Este important să schimbați numele sau să adăugați mai multe detalii, cum ar fi unitățile.
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" )
Explicarea codului
- În interiorul laboratorului (), ați adăugat:
- x = „Definiție Drat”: Schimbați numele axei x
- y = „Milă pe oră”: Schimbați numele axei y
ieșire:
Controlați cântarul
Puteți controla scara axei.
Funcția seq() este convenabilă atunci când trebuie să creați o secvență de numere. Sintaxa de bază este:
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`
De exemplu, dacă doriți să creați un interval de la 0 la 12 cu un pas de 3, veți avea patru numere, 0 4 8 12
seq(0, 12,4)
ieșire:
## [1] 0 4 8 12
Puteți controla scara axei x și a axei y ca mai jos
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" )
Explicarea codului
- Funcția scale_y_continuous() controlează axa y
- Funcția scale_x_continuous() controlează axa x.
- Parametrul breaks controlează împărțirea axei. Puteți adăuga manual secvența de numere sau puteți utiliza funcția seq():
- seq(1, 3.6, by = 0.2): creează șase numere de la 2.4 la 3.4 cu un pas de 3
- seq(1, 1.6, by = 0.1): creează șapte numere de la 1 la 1.6 cu un pas de 1
ieșire:
Temă
În cele din urmă, R ne permite să personalizăm intriga cu diferite teme. Biblioteca ggplot2 include opt teme:
- theme_bw()
- theme_light()
- theme_classis()
- theme_linedraw()
- theme_dark()
- theme_minimal()
- theme_gri()
- theme_void()
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" )
ieșire:
Salvați parcele
După toți acești pași, este timpul să salvați și să vă distribuiți graficul. Adăugați ggsave('NUMELE FIȘIERULUI) imediat după ce ați trasat graficul și acesta va fi stocat pe hard disk.
Graficul este salvat în directorul de lucru. Pentru a verifica directorul de lucru, puteți rula acest cod:
directory <-getwd() directory
Să reprezentăm graficul tău fantastic, să-l salvăm și să verificăm locația
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" )
ieșire:
ggsave("my_fantastic_plot.png")
ieșire:
## Saving 5 x 4 in image
notițe: Numai în scop pedagogic, am creat o funcție numită open_folder() pentru a deschide folderul director pentru dvs. Trebuie doar să rulați codul de mai jos și să vedeți unde este stocată imaginea. Ar trebui să vedeți un fișier cu numele 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)
Rezumat
Puteți rezuma argumentele pentru a crea un grafic de dispersie în tabelul de mai jos:
Obiectiv | Cod |
---|---|
Graficul de dispersie de bază |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
Graficul de dispersie cu grup de culori |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
Adăugați valori potrivite |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
Adauga titlu |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
Adăugați subtitrare |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
Redenumiți x |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
Redenumiți y |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
Controlați cântarul |
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) |
Creați jurnalele |
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point() |
Temă |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
Economisește |
ggsave("my_fantastic_plot.png") |