Raspršeni dijagram u R pomoću ggplot2 (s primjerom)

Grafikoni su treći dio procesa analize podataka. Prvi dio je o ekstrakcija podataka, drugi dio se bavi čišćenje i manipuliranje podacima. Konačno, podatkovni znanstvenik će možda trebati priopćiti svoje rezultate grafički.

Posao podatkovnog znanstvenika može se pregledati na sljedećoj slici

  • Prvi zadatak podatkovnog znanstvenika je definiranje istraživačkog pitanja. Ovo istraživačko pitanje ovisi o ciljevima i ciljevima projekta.
  • Nakon toga, jedan od najistaknutijih zadataka je inženjering značajki. Znanstvenik za podatke treba prikupljati, manipulirati i čistiti podatke
  • Kada ovaj korak završi, može početi istraživati ​​skup podataka. Ponekad je potrebno doraditi i promijeniti izvornu hipotezu zbog novog otkrića.

Dijagram raspršenosti u R

  • Kada objašnjenja analiza postignuta, podatkovni znanstvenik mora uzeti u obzir sposobnost čitatelja da razumjeti temeljne koncepte i modele.
  • Njegove rezultate treba predstaviti u obliku koji svi dionici mogu razumjeti. Jedna od najboljih metoda za komunicirati rezultati su kroz a grafikon.
  • Grafikoni su nevjerojatan alat za pojednostavljivanje složene analize.

ggplot2 paket

Ovaj dio vodiča fokusiran je na izradu grafikona/grafikona s R.

U ovom vodiču ćete koristiti paket ggplot2. Ovaj paket je izgrađen na dosljednoj podlozi knjige Gramatika grafike koju je napisao Wilkinson, 2005. ggplot2 je vrlo fleksibilan, uključuje mnoge teme i specifikacije zapleta na visokoj razini apstrakcije. Pomoću ggplot2 ne možete iscrtavati trodimenzionalne grafike i stvarati interaktivne grafike.

U ggplot2, graf se sastoji od sljedećih argumenata:

  • datum
  • estetsko preslikavanje
  • geometrijski objekt
  • statističke transformacije
  • vage
  • koordinatni sustav
  • prilagodbe položaja
  • fasetiranje

U udžbeniku ćete naučiti kako kontrolirati te argumente.

Osnovna sintaksa ggplot2 je:

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()`

Dijagram raspršenosti

Pogledajmo kako ggplot radi s mtcars skupom podataka. Počinjete iscrtavanjem dijagrama raspršenosti varijable mpg i varijable drat.

Osnovni dijagram raspršenosti

library(ggplot2)
ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point()

Objašnjenje koda

  • Prvo proslijedite skup podataka mtcars ggplotu.
  • Unutar aes() argumenta dodajete x-os i y-os.
  • Znak + znači da želite da R nastavi čitati kod. Čini kôd čitljivijim razbijanjem.
  • Koristite geom_point() za geometrijski objekt.

Izlaz:

Osnovni dijagram raspršenosti

Raspršeni dijagram sa grupama

Ponekad može biti zanimljivo razlikovati vrijednosti prema skupini podataka (tj. podaci na razini faktora).

ggplot(mtcars, aes(x = mpg, y = drat)) +
    geom_point(aes(color = factor(gear)))

Objašnjenje koda

  • Aes() unutar geom_point() kontrolira boju grupe. Grupa bi trebala biti faktorska varijabla. Dakle, pretvarate varijabilni stupanj prijenosa u faktor.
  • Sve u svemu, imate kod aes(boja = faktor(zupčanik)) koji mijenja boju točaka.

Izlaz:

Raspršeni dijagram s grupama

Promjena osi

Promjena veličine podataka veliki je dio posla podatkovnog znanstvenika. U rijetkim slučajevima podaci dolaze u lijepom obliku zvona. Jedno od rješenja da vaše podatke učinite manje osjetljivima na ekstremne vrijednosti jest njihovo ponovno skaliranje.

ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
    geom_point(aes(color = factor(gear)))

Objašnjenje koda

  • Transformirate x i y varijable u log() izravno unutar aes() preslikavanja.

Imajte na umu da se može primijeniti bilo koja druga transformacija, poput standardizacije ili normalizacije.

Izlaz:

Promjena osi

Dijagram raspršenosti s prilagođenim vrijednostima

Grafikonu možete dodati drugu razinu informacija. Možete nacrtati prilagođenu vrijednost linearne regresije.

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šnjenje koda

  • graf: Vaš graf pohranjujete u varijabilni graf. Korisno je za daljnju upotrebu ili izbjegavanje previše složenih linija kodova
  • Argument stat_smooth() kontrolira metodu izglađivanja
  • metoda = “lm”: Linearna regresija
  • col = “#C42126”: Kod za crvenu boju linije
  • se = FALSE: Ne prikazuj standardnu ​​pogrešku
  • veličina = 1: veličina linije je 1

Izlaz:

Raspršeni dijagram s prilagođenim vrijednostima

Imajte na umu da su dostupne i druge metode izglađivanja

  • glm
  • gam
  • les: zadana vrijednost
  • naplatak

Dodajte informacije na grafikon

Do sada nismo dodavali informacije u grafikone. Grafikoni moraju biti informativni. Čitatelj bi trebao vidjeti priču iza analize podataka samo gledajući grafikon bez upućivanja na dodatnu dokumentaciju. Dakle, grafikoni trebaju dobre oznake. Možete dodati oznake pomoću funkcije labs().

Osnovna sintaksa za lab() je:

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

Dodajte naslov

Jedna obvezna informacija koju treba dodati očito je naslov.

my_graph +
    labs(
        title = "Plot Mile per hours and drat, in log"
         )

Objašnjenje koda

  • my_graph: Vi koristite graf koji ste pohranili. Izbjegava ponovno pisanje svih kodova svaki put kada dodate nove informacije na grafikon.
  • Omotate naslov unutar lab().
  • Šifra za crvenu boju linije
  • se = FALSE: Ne prikazuj standardnu ​​pogrešku
  • veličina = 1: veličina linije je 1

Izlaz:

Dodajte naslov

Dodajte naslov s dinamičnim nazivom

Dinamički naslov je koristan za dodavanje preciznijih informacija u naslov.

Funkciju paste() možete koristiti za ispis statičkog i dinamičkog teksta. Osnovna sintaksa paste() je:

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	

Primjer:

A <-2010
paste("The first year is", A)

Izlaz:

## [1] "The first year is 2010"
B <-2018

paste("The first year is", A, "and the last year is", B)

Izlaz:

## [1] "The first year is 2010 and the last year is 2018"

Našem grafikonu možete dodati dinamički naziv, naime prosjek 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šnjenje koda

  • Kreirate prosjek mpg sa mean(mtcars$mpg) pohranjenim u mean_mpg varijabli
  • Koristite paste() sa mean_mpg za stvaranje dinamičkog naslova koji vraća srednju vrijednost mpg

Izlaz:

Dodajte naslov s dinamičkim nazivom

Dodajte podnaslov

Dva dodatna detalja mogu vaš grafikon učiniti eksplicitnijim. Govorite o podnaslovu i natpisu. Podnaslov ide odmah ispod naslova. Naslov može informirati tko je izvršio izračun i izvor podataka.

my_graph +
    labs(
        title =
        "Relation between Mile per hours and drat",
        subtitle =
        "Relationship break down by gear class",
        caption = "Authors own computation"
    )

Objašnjenje koda

  • Unutar lab() ste dodali:
    • title = “Odnos između milja po satu i drata”: Dodajte naslov
    • podnaslov = “Raščlamba odnosa prema klasi opreme”: Dodajte podnaslov
    • caption = “Vlastiti proračun autora: Dodajte naslov
    • Svaku novu informaciju odvajate zarezom, ,
  • Imajte na umu da prekidate retke koda. Nije obavezno i ​​samo pomaže lakšem čitanju koda

Izlaz:

Dodajte podnaslov

Preimenujte x-os i y-os

Sama varijabla u skupu podataka možda neće uvijek biti eksplicitna ili prema konvenciji koristiti _ kada postoji više riječi (tj. GDP_CAP). Ne želite da se takvo ime pojavljuje u vašem grafikonu. Važno je promijeniti naziv ili dodati više detalja, poput jedinica.

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šnjenje koda

  • Unutar lab() ste dodali:
    • x = “Definicija nacrta”: Promijenite naziv x-osi
    • y = “Milje po satima”: Promijenite naziv y-osi

Izlaz:

Preimenujte x-os i y-os

Kontrolirajte vagu

Možete kontrolirati mjerilo osi.

Funkcija seq() prikladna je kada trebate stvoriti niz brojeva. Osnovna sintaksa je:

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 primjer, ako želite stvoriti raspon od 0 do 12 s korakom od 3, imat ćete četiri broja, 0 4 8 12

seq(0, 12,4)

Izlaz:

## [1]  0  4  8 12

Možete kontrolirati mjerilo osi x i osi y kao što je prikazano u nastavku

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šnjenje koda

  • Funkcija scale_y_continuous() kontrolira Y-osa
  • Funkcija scale_x_continuous() kontrolira apscisa.
  • Parametar breaks kontrolira podjelu osi. Možete ručno dodati niz brojeva ili koristiti funkciju seq():
    • seq(1, 3.6, by = 0.2): Stvorite šest brojeva od 2.4 do 3.4 s korakom od 3
    • seq(1, 1.6, by = 0.1): Stvorite sedam brojeva od 1 do 1.6 s korakom od 1

Izlaz:

Kontrolirajte vagu

Tema

Konačno, R nam omogućuje da prilagodimo radnju različitim temama. Knjižnica ggplot2 uključuje osam tema:

  • tema_bw()
  • theme_light()
  • theme_classis()
  • theme_linedraw()
  • tema_tamna()
  • theme_minimal()
  • tema_siva()
  • tema_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"
    )

Izlaz:

Tema

Spremi parcele

Nakon svih ovih koraka, vrijeme je da spremite i podijelite svoj grafikon. Dodate ggsave('NAME OF THE FILE) odmah nakon što iscrtate grafikon i on će biti pohranjen na tvrdom disku.

Grafikon se sprema u radni direktorij. Za provjeru radnog direktorija, možete pokrenuti ovaj kod:

directory <-getwd()
directory

Iscrtajmo vaš fantastičan grafikon, spremimo ga i provjerimo lokaciju

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

Izlaz:

Spremi parcele

ggsave("my_fantastic_plot.png")

Izlaz:

## Saving 5 x 4 in image

bilješke: Samo u pedagoške svrhe, stvorili smo funkciju koja se zove open_folder() da vam otvori mapu imenika. Samo trebate pokrenuti kod ispod i vidjeti gdje je slika pohranjena. Trebali biste vidjeti naziv datoteke 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)

Rezime

U donjoj tablici možete sažeti argumente za izradu dijagrama raspršenosti:

Cilj Kodirati
Osnovni dijagram raspršenosti
ggplot(df, aes(x = x1, y = y)) + geom_point()
Raspršeni dijagram s grupom boja
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
Dodajte prilagođene vrijednosti
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
Dodaj Naslov
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
Dodajte podnaslov
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
Preimenuj x
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
Preimenuj y
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
Kontrolirajte vagu
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)
Stvorite zapise
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point()
Tema
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic()
UŠTEDI
ggsave("my_fantastic_plot.png")