Hajontakaavio R:ssä käyttäen ggplot2:ta esimerkin avulla
⚡ Älykäs yhteenveto
Hajontakaavio R:ssä ggplot2:lla kuvaa kaksi jatkuvaa muuttujaa x- ja y-akseleille geom_point():lla. Tämä läpikäynti kattaa ryhmänping värin, logaritmisten muunnosten, sovitettujen regressiosuorien, otsikoiden, fasetoinnin, päällekkäiskorjausten, asteikkojen, teemojen ja tallennuksen mukaan.

Miksi graafit ovat tärkeitä data-analyysissä
Kaaviot ovat data-analyysin kolmas osa. Ensimmäinen osa on noin data extracTUKSEN, toinen osa käsittelee tietojen puhdistaminen ja käsittely. Viimeinkin datatieteilijä saattaa tarvita välittää tulokset graafisesti.
Tietotieteilijän työnkulku on tiivistetty alla olevassa 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.
- 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.
Tämän tutoriaalin loppuosassa nuo graafit rakennetaan ggplot2-paketilla.
Ggplot2-paketti
Tämä tutoriaali keskittyy kaavioiden rakentamiseen R:ssä ggplot2:n avulla.
Tässä opetusohjelmassa käytät ggplot2-pakettia. Paketti toteuttaa Leland Wilkinsonin vuonna 2005 kuvaaman grafiikan kieliopin. ggplot2 on joustava, sisältää useita teemoja ja antaa sinun määrittää kuvaajan korkealla abs-tasolla.tracHuomaa, että se ei tuota kolmiulotteista tai interaktiivista grafiikkaa; niihin tarvitaan paketteja, kuten plotly tai rgl.
Ggplot2:ssa kaavio koostuu seuraavista argumenteista:
- tiedot
- esteettinen karttaping
- 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()`
Kuinka luoda sirontakaavio R:ssä
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()
Code 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ö:
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)))
Code Selitys
- geom_point()-funktion sisällä oleva aes()-metodi ohjaa kunkin ryhmän väriä. Ryhmäping muuttujan on oltava tekijä, joten vaihde sisällytetään factor()-funktioon.
- Kaiken kaikkiaan sinulla on koodi aes(väri = factor(gear)), joka muuttaa pisteiden väriä.
lähtö:
Akselin mittakaavan muuttaminen logaritmimuunnoksella
Datan uudelleenskaalaus on suuri osa analyytikon työtä, koska raakamuuttujat harvoin saapuvat perille siistissä kellomuodossa. Logaritmien käyttäminen on yksi tapa tiivistää ääriarvoja ja tehdä kuvaajasta vähemmän herkkä poikkeaville arvoille.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Code Selitys
- Muunnat x- ja y-muuttujat log()-funktiossa suoraan aes()-mapin sisälläping.
Huomaa, että mitä tahansa muuta muunnosta, kuten standardointia tai normalisointia, voidaan soveltaa.
lähtö:
Sirontadiagrammi sovitetuilla arvoilla
Voit lisätä kaavioon toisen tietotason. Voit päällekkäin asettaa sovitetut arvot lineaarinen regressio.
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
Code Selitys
- my_graph: kuvaaja tallennetaan my_graph-objektiin, joten myöhemmissä vaiheissa voidaan lisätä tasoja toistamatta koko kutsua
- Argumentti stat_smooth() ohjaa tasoitusmenetelmää
- menetelmä = "lm": Lineaarinen regressio
- sarake = “#C42126”: Code viivan punaiselle värille
- se = EPÄTOSI: Älä näytä vakiovirhettä
- size = 1: viivan paksuus. Ggplot2-versiossa 3.4.0 ja uudemmissa versioissa tämä argumentti nimettiin uudelleen viivanleveydeksi viivojen geometrioissa.
lähtö:
Huomaa, että muita tasoitusmenetelmiä on saatavilla
- glm
- GAM
- lössi: oletusarvo alle 1 000 havainnolle
- rlm: vankka lineaarinen malli MASS-paketista
Ennen kaavion muotoilua on syytä tietää, milloin sirontakaavio on oikea valinta.
Hajontakaavio vs. viivakaavio vs. Bubble-kaavio R-kielellä
Kaikki kolme kuvaavat kahta jatkuvaa muuttujaa toisiaan vasten, joten valinta riippuu siitä, mitä lukijan tulisi oppia.
| Kriteeri | Hajontapiirros | Line Chart | Bubble Kaavio |
|---|---|---|---|
| Näytä | Kahden muuttujan välinen korrelaatio | Yhden muuttujan muutos järjestetyn akselin yli | Korrelaatio plus kolmas suuruusluokka |
| X-akseli | Mikä tahansa jatkuva muuttuja | Yleensä aika tai jokin muu järjestetty asteikko | Mikä tahansa jatkuva muuttuja |
| Pistejärjestys | Merkityksetön | Kriittiset pisteet ovat yhteydessä toisiinsa | Merkityksetön |
| Kolmas muuttuja | Värin tai muodon kautta | Erillisten linjojen kautta | Läpimenopisteen koko |
| ggplot2-kutsu | geom_piste() | geom_line() | geom_point(aes(koko = z)) |
Hajontapisteiden yhdistäminen suoralla, kun x-akselilla ei ole luonnollista järjestystä, on yleinen virhe: se viittaa sarjaan, jota ei ole olemassa. Varaa geom_line() järjestetyille akseleille, kuten päivämäärille. Yhden muuttujan jakaumille käytä laatikko juoni sen sijaan.
Lisää tiedot kaavioon
Toistaiseksi kaavioissa ei ole selittävää tekstiä. Lukijan pitäisi pystyä näkemään tarina datasta pelkästään kaaviosta ilman lisädokumentaatiota, mikä tarkoittaa, että kaavio tarvitsee hyvät otsikot. Voit lisätä otsikoita labs()-funktiolla.
labs()-funktion perussyntaksi on:
labs(title = "Hello Guru99") arguments: - title: Main title displayed above the plot - subtitle: Secondary line below the title - caption: Note below the plot, usually the data source - x: Rename the x-axis - y: Rename the y-axis - color / fill: Rename the legend Example: labs(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"
)
Code Selitys
- my_graph: Käytät tallentamaasi kaaviota. Se välttää kaikkien koodien kirjoittamisen uudelleen joka kerta, kun lisäät kaavioon uutta tietoa.
- Otsikko sijoitetaan labs()-funktion sisään.
lähtö:
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) )
Code 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ää alaotsikko
Kaksi lisätietoa tekee kaaviosta selkeämmän. Puhutaan alaotsikosta ja kuvatekstistä. Alaotsikko tulee heti otsikon alle. Kuvateksti voi kertoa kuka laskimen teki ja mistä tiedot ovat peräisin.
my_graph +
labs(
title =
"Relation between Mile per hours and drat",
subtitle =
"Relationship break down by gear class",
caption = "Authors own computation"
)
Code Selitys
- Labs()-funktion sisällä 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ö:
Nimeä uudelleen x-akseli ja y-akseli
Sarakkeiden nimet ovat harvoin esityskelpoisia. Ne ovat usein lyhennettyjä tai sanojen välissä käytetään alaviivoja, kuten esimerkiksi GDP_CAP-muodossa. Nimeä ne uudelleen kaaviossa ja lisää yksiköt sinne, missä niillä on merkitystä.
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"
)
Code Selitys
- Labs()-funktion sisällä lisäsit:
- x = "Drat-määrittely": Muuta x-akselin nimeä
- y = "Maili tunnissa": Muuta y-akselin nimeä
lähtö:
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`
Esimerkiksi väliltä 0–12, jonka askelväli on 4, saadaan neljä numeroa: 0, 4, 8 ja 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"
)
Code 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 sekvenssi luvuista 1 lukuun 3.6 0.2:n välein, eli 14 katkaisupisteellä
- seq(1, 1.6, by = 0.1): Luo seitsemän lukua luvusta 1 luvuksi 1.6 0.1:n välein.
lähtö:
Teema
Lopuksi, ggplot2:ssa voit muokata koko juonen tyyliä yhdellä teemafunktiolla. Paketin mukana toimitetaan kahdeksan kokonaista teemaa:
- teema_bw()
- theme_light()
- teema_klassikko()
- 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ö:
Tallenna tontit
Kaikkien näiden vaiheiden jälkeen on aika tallentaa ja jakaa kuvaajasi. Kutsu ggsave(“tiedoston_nimi.png”)-funktiota heti piirtämisen jälkeen, niin kuva kirjoitetaan levylle.
Kaavio tallennetaan työhakemistoon. Voit tarkistaa työhakemiston suorittamalla tämän koodin:
directory <- getwd() directory
Piirrä valmis kaavio, tallenna se ja tarkista, mihin se päätyi:
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ö:
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)
Kuinka luoda fasetoituja sirontakaavioita R:ssä facet_wrap()-funktiolla
Fasetointi on yksi kahdeksasta aiemmin luetellusta ggplot2-komponentista, ja se on selkein ratkaisu ruuhkaiseen kaavioon. Sen sijaan, että jokainen ryhmä puristettaisiin yhteen paneeliin, ggplot2 piirtää pienen monikerran jokaiselle muuttujan tasolle, kaikki samoilla asteikoilla, jotta paneelit pysyvät vertailukelpoisina.
# One panel per gear count ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point() + facet_wrap(~ gear) + theme_classic()
Kolme argumenttia hoitaa suurimman osan työstä.
- ncol or nrow: pakota paneelit tiettyyn asetteluun, esimerkiksi facet_wrap(~ gear, ncol = 2).
- asteikotOletusarvoisesti ”kiinteä”, joten jokainen paneeli jakaa yhden akselialueen. Käytä ”free_y”- tai ”free”-arvoa, kun ryhmät eroavat suuresti suuruudeltaan, mutta huomaa, että vapaat mittakaavat tekevät paneelien visuaalisesta vertailusta harhaanjohtavaa.
- labeller: korvaa raakatekijätason jokaisessa kaistaleessa, esimerkiksi labeller = label_both tulostaakseen ”gear: 4” arvon ”4” sijaan.
Kaksi ryhmääping muuttujia. Käytä facet_grid()-funktiota paneelimatriisin luomiseen, jossa ensimmäinen muuttuja sijoittuu rivien ja toinen sarakkeiden välille:
ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point(aes(color = factor(cyl))) + facet_grid(am ~ gear) + theme_classic()
Puolia vai värejä? Väri toimii hyvin noin neljään ryhmään asti kaaviossa, joissa päällekkäisyys on rajallista. Tämän lisäksi tai aina, kun ryhmät menevät päällekkäin voimakkaasti, fasetointi on helpompi lukea, koska jokainen paneeli sisältää vain omat pisteensä. Voit yhdistää molemmat: fasetoinnin yhden muuttujan mukaan ja värin toisen mukaan, kuten yllä olevassa facet_grid()-esimerkissä.
Kuinka käsitellä ylikuvaamista R-hajontakaavioissa
Muutamalla kymmenellä havainnolla jokainen piste on näkyvissä. Tuhansilla markkereilla merkit pinoutuvat päällekkäin ja tihein alue näkyy vain yhtenäisenä möykkynä. Eli ylipiirustus, ja ggplot2 tarjoaa neljä vakioratkaisua.
1. Vähennä läpinäkyvyyttä. Halvin ratkaisu. Päällekkäisyysping pisteet tummuvat luonnostaan, joten tiheys tulee näkyviin:
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + theme_classic()
2. Jitterin diskreetit arvot. Kun muuttuja ottaa vain muutaman arvon, pisteet päätyvät samoille koordinaateille. Pieni satunnainen siirtymä erottaa ne toisistaan:
ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + geom_jitter(width = 0.15, height = 0) + theme_classic()
Aseta korkeus = 0, jotta y-arvot, jotka sisältävät todellisen tiedon, eivät koskaan muutu.
3. Heitä lentokone roskiin. Suurissa tietojoukoissa laske havainnot solukohtaisesti ja yhdistä lukumäärä väriin. Kuusikulmaiset laatikot välttävät neliömäisten laatikoiden tuottamat visuaaliset artefaktit:
ggplot(diamonds, aes(x = carat, y = price)) + geom_hex(bins = 40) + theme_classic()
4. Piirrä tiheyskäyrät. Ääriviivat hahmottelevat alueet, joihin havainnot keskittyvät, ja ne kerrostuvat siististi haalistuneiden pisteiden päälle:
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + geom_density_2d(color = "#C42126") + theme_classic()
Nykyään alpha käsittelee muutamia tuhansia pisteitä, hexagonal binning kymmeniä tuhansia ja datan näytteistäminen dplyr::slice_sample()-funktiolla on käytännöllinen vaihtoehto.
Hajontakaavio R:ssä: Code Viite
Alla olevassa taulukossa luetellaan ggplot2-kutsu jokaiselle yllä käsitellylle vaihtoehdolle:
| Tavoite | Code |
|---|---|
| Perussironnakaavio |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
| Hajontakaavio väriryhmällä |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x2))) |
| Lisää sovitetut arvot |
ggplot(df, aes(x = x1, y = y)) + geom_point() + stat_smooth(method = "lm") |
| 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() |
| Ryhmän tekemä fasetti |
ggplot(df, aes(x = x1, y = y)) + geom_point() + facet_wrap(~ x2) |
| Käsittele päällekkäispiirtoa |
ggplot(df, aes(x = x1, y = y)) + geom_point(alpha = 0.3) |
| Säästä |
ggsave("my_fantastic_plot.png")
|












