Scatter Plot R:ssä käyttämällä ggplot2:ta (esimerkin kanssa)

Kaaviot ovat data-analyysin kolmas osa. Ensimmäinen osa on noin tietojen poiminta, toinen osa käsittelee tietojen puhdistaminen ja käsittely. Viimeinkin datatieteilijä saattaa tarvita välittää tulokset graafisesti.

Datatieteilijän työtä voi tarkastella seuraavassa kuvassa

  • Datatieteilijän ensimmäinen tehtävä on määritellä tutkimuskysymys. Tämä tutkimuskysymys riippuu hankkeen tavoitteista ja päämääristä.
  • Sen jälkeen yksi näkyvimmistä tehtävistä on ominaisuussuunnittelu. Datatieteilijän tulee kerätä, käsitellä ja puhdistaa dataa
  • Kun tämä vaihe on valmis, hän voi alkaa tutkia tietojoukkoa. Joskus on tarpeen tarkentaa ja muuttaa alkuperäistä hypoteesia uuden löydön vuoksi.

Scatter Plot in R

  • Kun selittävä analyysi on saavutettu, datatieteilijän on otettava huomioon lukijan kyky ymmärtää taustalla olevat käsitteet ja mallit.
  • Hänen tulokset tulee esittää muodossa, jonka kaikki sidosryhmät ymmärtävät. Yksi parhaista tavoista tiedottaa tulokset ovat kautta a kaavio.
  • Kaaviot ovat uskomaton työkalu monimutkaisen analyysin yksinkertaistamiseen.

ggplot2-paketti

Tämä opetusohjelman osa keskittyy kuvaajien/kaavioiden tekemiseen R:llä.

Tässä opetusohjelmassa aiot käyttää ggplot2-pakettia. Tämä paketti on rakennettu Wilkinsonin, 2005, Grammar of graphics -kirjan johdonmukaiselle pohjalle. ggplot2 on erittäin joustava, sisältää monia teemoja ja juonimäärityksiä korkealla abstraktiolla. ggplot2:lla et voi piirtää kolmiulotteista grafiikkaa ja luoda interaktiivista grafiikkaa.

Ggplot2:ssa kaavio koostuu seuraavista argumenteista:

  • tiedot
  • esteettinen kartoitus
  • geometrinen esine
  • tilastollisia muunnoksia
  • asteikot
  • koordinaattijärjestelmä
  • asennon säädöt
  • fasetointi

Opit ohjaamaan näitä argumentteja opetusohjelmassa.

Ggplot2:n perussyntaksi on:

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

Hajontakaavio

Katsotaan kuinka ggplot toimii mtcars-tietojoukon kanssa. Aloitat piirtämällä mpg-muuttujan ja drat-muuttujan hajontakaavion.

Perussironnakaavio

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

Koodin selitys

  • Välität ensin tietojoukon mtcars ggplotille.
  • Aes()-argumentin sisään lisäät x-akselin ja y-akselin.
  • +-merkki tarkoittaa, että haluat R:n jatkavan koodin lukemista. Se tekee koodista luettavamman rikkomalla sen.
  • Käytä geom_point() geometriselle objektille.

lähtö:

Perushajotuskaavio

Hajakuvaaja ryhmien kanssa

Joskus voi olla mielenkiintoista erottaa arvot tietoryhmän (eli tekijätason datan) perusteella.

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

Koodin selitys

  • Geom_point():n sisällä oleva aes() ohjaa ryhmän väriä. Ryhmän tulee olla tekijämuuttuja. Siten muunnat muuttuvan vaihteen tekijäksi.
  • Kaiken kaikkiaan sinulla on koodi aes(väri = factor(gear)), joka muuttaa pisteiden väriä.

lähtö:

Hajakuvaaja ryhmien kanssa

Vaihda akselia

Datan skaalaaminen on suuri osa datatieteilijän työtä. Harvinaisissa tapauksissa tiedot tulevat kauniissa kellomuodossa. Yksi ratkaisu tehdä tiedoistasi vähemmän herkkiä poikkeaville arvoille on skaalata ne uudelleen.

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

Koodin selitys

  • Muunnat x- ja y-muuttujat log():ssa suoraan aes()-kuvauksen sisällä.

Huomaa, että mitä tahansa muuta muunnosta, kuten standardointia tai normalisointia, voidaan soveltaa.

lähtö:

Vaihda akselia

Sirontadiagrammi sovitetuilla arvoilla

Voit lisätä kaavioon toisen tason tietoja. Voit piirtää lineaarisen regression sovitetun arvon.

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

Koodin selitys

  • graph: Tallennat graafisi muuttujakaavioon. Se on hyödyllinen jatkokäytössä tai liian monimutkaisten koodirivien välttämiseksi
  • Argumentti stat_smooth() ohjaa tasoitusmenetelmää
  • menetelmä = "lm": Lineaarinen regressio
  • col = “#C42126”: Viivan punaisen värin koodi
  • se = EPÄTOSI: Älä näytä vakiovirhettä
  • koko = 1: viivan koko on 1

lähtö:

Hajakuvaaja sovitetuilla arvoilla

Huomaa, että muita tasoitusmenetelmiä on saatavilla

  • glm
  • GAM
  • lössi: oletusarvo
  • vanne

Lisää tiedot kaavioon

Toistaiseksi emme ole lisänneet tietoja kaavioihin. Kaavioiden tulee olla informatiivisia. Lukijan tulisi nähdä data-analyysin tarina vain katsomalla kaaviota ilman lisädokumentaatiota. Siksi kaaviot tarvitsevat hyvät etiketit. Voit lisätä tarroja labs()-toiminnolla.

Lab():n perussyntaksi on:

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

Lisää otsikko

Yksi pakollinen lisättävä tieto on tietysti otsikko.

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

Koodin selitys

  • my_graph: Käytät tallentamaasi kaaviota. Se välttää kaikkien koodien kirjoittamisen uudelleen joka kerta, kun lisäät kaavioon uutta tietoa.
  • Käärit otsikon lab() sisään.
  • Viivan punaisen värin koodi
  • se = EPÄTOSI: Älä näytä vakiovirhettä
  • koko = 1: viivan koko on 1

lähtö:

Lisää otsikko

Lisää otsikko dynaamisella nimellä

Dynaaminen otsikko auttaa lisäämään otsikkoon tarkempia tietoja.

Voit käyttää paste()-funktiota staattisen ja dynaamisen tekstin tulostamiseen. Paste():n perussyntaksi on:

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	

Esimerkiksi:

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

lähtö:

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

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

lähtö:

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

Voit lisätä kaavioomme dynaamisen nimen, nimittäin mpg:n keskiarvon.

mean_mpg <- mean(mtcars$mpg)
my_graph + labs(
    title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg)
)

Koodin selitys

  • Luot mpg:n keskiarvon keskiarvolla(mtcars$mpg), joka on tallennettu mean_mpg-muuttujaan
  • Käytät paste() ja mean_mpg luodaksesi dynaamisen otsikon, joka palauttaa mpg:n keskiarvon

lähtö:

Lisää otsikko dynaamisella nimellä

Lisää alaotsikko

Kaksi lisätietoa voivat tehdä kaaviostasi selkeämmän. Puhut tekstityksestä. Alaotsikko menee heti otsikon alle. Kuvateksti voi kertoa laskennan suorittaneesta ja tiedon lähteestä.

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

Koodin selitys

  • Inside the lab() lisäsit:
    • title = "Tuntimailin ja dratin välinen suhde": Lisää otsikko
    • subtitle = "Suhteen erittely vaihdeluokan mukaan": Lisää alaotsikko
    • caption = "Tekijän oma laskenta: Lisää kuvateksti
    • Erottelet jokaisen uuden tiedon pilkulla,
  • Huomaa, että rikot koodirivit. Se ei ole pakollinen, ja se vain auttaa koodin lukemisessa helpommin

lähtö:

Lisää tekstitys

Nimeä uudelleen x-akseli ja y-akseli

Muuttujat itse tietojoukossa eivät välttämättä aina ole eksplisiittisiä tai käytä tavanomaisesti _-merkkiä, kun sanoja on useita (eli GDP_CAP). Et halua sellaisen nimen näkyvän kaaviossasi. On tärkeää muuttaa nimi tai lisätä lisätietoja, kuten yksiköt.

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

Koodin selitys

  • Inside the lab() lisäsit:
    • x = "Drat-määrittely": Muuta x-akselin nimeä
    • y = "Maili tunnissa": Muuta y-akselin nimeä

lähtö:

Nimeä uudelleen x-akseli ja y-akseli

Hallitse vaakoja

Voit hallita akselin mittakaavaa.

Funktio seq() on kätevä, kun haluat luoda numerosarjan. Perussyntaksi on:

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`	

Jos esimerkiksi haluat luoda alueen 0-12 askeleella 3, sinulla on neljä numeroa, 0 4 8 12

seq(0, 12,4)

lähtö:

## [1]  0  4  8 12

Voit ohjata x-akselin ja y-akselin mittakaavaa alla

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

Koodin selitys

  • Funktio scale_y_continuous() ohjaa y-akseli
  • Funktio scale_x_continuous() ohjaa x-akseli.
  • Parametrikatkot ohjaavat akselin jakoa. Voit lisätä numerosarjan manuaalisesti tai käyttää seq()-funktiota:
    • seq(1, 3.6, by = 0.2): Luo kuusi numeroa väliltä 2.4–3.4 askeleella 3
    • seq(1, 1.6, by = 0.1): Luo seitsemän numeroa väliltä 1–1.6 askeleella 1

lähtö:

Hallitse vaakoja

Teema

Lopuksi R antaa meille mahdollisuuden räätälöidä juoni erilaisilla teemoilla. Kirjasto ggplot2 sisältää kahdeksan teemaa:

  • teema_bw()
  • theme_light()
  • theme_classis()
  • theme_linedraw()
  • theme_dark()
  • theme_minimal()
  • teema_harmaa()
  • 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"
    )

lähtö:

Teema

Tallenna tontit

Kaikkien näiden vaiheiden jälkeen on aika tallentaa ja jakaa kaaviosi. Lisäät ggsave('TIEDOSTON NIMI) heti kaavion piirtämisen jälkeen ja se tallennetaan kiintolevylle.

Kaavio tallennetaan työhakemistoon. Voit tarkistaa työhakemiston suorittamalla tämän koodin:

directory <-getwd()
directory

Piirretään upea kaaviosi, tallennetaan se ja tarkistetaan sijainti

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

lähtö:

Tallenna tontit

ggsave("my_fantastic_plot.png")

lähtö:

## Saving 5 x 4 in image

Huomautuksia: Vain pedagogista tarkoitusta varten loimme toiminnon nimeltä open_folder() avaamaan hakemistokansion puolestasi. Sinun tarvitsee vain suorittaa alla oleva koodi ja katsoa, ​​mihin kuva on tallennettu. Sinun pitäisi nähdä tiedostonimet 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)

Yhteenveto

Voit tehdä yhteenvedon argumenteista sirontakaavion luomiseksi alla olevaan taulukkoon:

Tavoite Koodi
Perussironnakaavio
ggplot(df, aes(x = x1, y = y)) + geom_point()
Sirontakuvaaja väriryhmällä
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
Lisää sovitetut arvot
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
Lisää otsikko
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
Lisää tekstitys
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
Nimeä x uudelleen
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
Nimeä uudelleen y
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
Hallitse mittakaavaa
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)
Luo lokit
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point()
Teema
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic()
Säästä
ggsave("my_fantastic_plot.png")