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.

Graficul de dispersie în R

  • 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 de bază

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:

Graficul de dispersie cu grupuri

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:

Schimbați axa

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:

Graficul de dispersie cu valori ajustate

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

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 titlu cu un nume dinamic

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:

Adăugați un subtitrare

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:

Redenumiți axa x și axa y

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:

Controlați cântarul

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:

Temă

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:

Salvați parcele

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")