Spredningsplott i R ved å bruke ggplot2 (med eksempel)

Grafer er den tredje delen av prosessen med dataanalyse. Den første delen handler om datautvinning, tar den andre delen for seg rense og manipulere dataene. Endelig kan dataforskeren trenge det kommunisere resultatene hans grafisk.

Jobben til dataforskeren kan gjennomgås i det følgende bildet

  • Den første oppgaven til en dataforsker er å definere et forskningsspørsmål. Dette forskningsspørsmålet avhenger av mål og mål for prosjektet.
  • Etter det er en av de mest fremtredende oppgavene funksjonsteknikken. Dataforskeren må samle inn, manipulere og rense dataene
  • Når dette trinnet er fullført, kan han begynne å utforske datasettet. Noen ganger er det nødvendig å avgrense og endre den opprinnelige hypotesen på grunn av en ny oppdagelse.

Spredningsplott i R

  • når forklarende analysen er oppnådd, må dataforskeren vurdere leserens kapasitet til forstå de underliggende konseptene og modellene.
  • Resultatene hans bør presenteres i et format som alle interessenter kan forstå. En av de beste metodene for å kommunisere resultatene er gjennom en graf.
  • Grafer er et utrolig verktøy for å forenkle komplekse analyser.

ggplot2-pakken

Denne delen av opplæringen fokuserer på hvordan du lager grafer/diagrammer med R.

I denne opplæringen skal du bruke ggplot2-pakken. Denne pakken er bygget på den konsistente underliggende boken Grammar of graphics skrevet av Wilkinson, 2005. ggplot2 er veldig fleksibel, inneholder mange temaer og plotspesifikasjoner på et høyt abstraksjonsnivå. Med ggplot2 kan du ikke plotte 3-dimensjonal grafikk og lage interaktiv grafikk.

I ggplot2 er en graf sammensatt av følgende argumenter:

  • dato
  • estetisk kartlegging
  • geometrisk objekt
  • statistiske transformasjoner
  • vekter
  • koordinatsystem
  • posisjonsjusteringer
  • fasettering

Du vil lære hvordan du kontrollerer disse argumentene i opplæringen.

Den grunnleggende syntaksen til ggplot2 er:

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

La oss se hvordan ggplot fungerer med mtcars-datasettet. Du starter med å plotte et scatterplot av mpg-variabelen og drat-variabelen.

Grunnleggende spredningsplott

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

Kode Forklaring

  • Du sender først datasettet mtcars til ggplot.
  • Inne i aes()-argumentet legger du til x-aksen og y-aksen.
  • +-tegnet betyr at du vil at R skal fortsette å lese koden. Det gjør koden mer lesbar ved å bryte den.
  • Bruk geom_point() for det geometriske objektet.

Utgang:

Grunnleggende spredningsplott

Spredningsplott med grupper

Noen ganger kan det være interessant å skille verdiene med en gruppe data (dvs. data på faktornivå).

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

Kode Forklaring

  • Aes() inne i geom_point() kontrollerer fargen på gruppen. Gruppen skal være en faktorvariabel. Dermed konverterer du det variable giret til en faktor.
  • Til sammen har du koden aes(color = factor(gear)) som endrer fargen på prikkene.

Utgang:

Spredningsplott med grupper

Bytt akse

Omskalering av dataene er en stor del av dataforskerjobben. I sjeldne tilfeller kommer data i en fin klokkeform. En løsning for å gjøre dataene dine mindre følsomme for uteliggere er å omskalere dem.

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

Kode Forklaring

  • Du transformerer x- og y-variablene i log() direkte inne i aes()-tilordningen.

Merk at enhver annen transformasjon kan brukes som standardisering eller normalisering.

Utgang:

Endre akse

Spredningsplott med tilpassede verdier

Du kan legge til et annet informasjonsnivå til grafen. Du kan plotte den tilpassede verdien av en lineær regresjon.

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

Kode Forklaring

  • graf: Du lagrer grafen din i variabelgrafen. Det er nyttig for videre bruk eller unngå for komplisert kodelinje
  • Argumentet stat_smooth() kontrollerer utjevningsmetoden
  • metode = "lm": Lineær regresjon
  • col = "#C42126": Kode for den røde fargen på linjen
  • se = FALSE: Ikke vis standardfeilen
  • størrelse = 1: Størrelsen på linjen er 1

Utgang:

Spredningsplott med tilpassede verdier

Merk at andre utjevningsmetoder er tilgjengelige

  • glm
  • gam
  • loess: standardverdi
  • rim

Legg til informasjon i grafen

Så langt har vi ikke lagt til informasjon i grafene. Grafer må være informative. Leseren bør se historien bak dataanalysen bare ved å se på grafen uten å henvise til ytterligere dokumentasjon. Derfor trenger grafer gode etiketter. Du kan legge til etiketter med labs()-funksjonen.

Den grunnleggende syntaksen for lab() er:

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

Legg til en tittel

En obligatorisk informasjon å legge til er åpenbart en tittel.

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

Kode Forklaring

  • my_graph: Du bruker grafen du lagret. Den unngår å skrive om alle kodene hver gang du legger til ny informasjon i grafen.
  • Du pakker tittelen inne i lab().
  • Kode for den røde fargen på linjen
  • se = FALSE: Ikke vis standardfeilen
  • størrelse = 1: Størrelsen på linjen er 1

Utgang:

Legg til en tittel

Legg til en tittel med et dynamisk navn

En dynamisk tittel er nyttig for å legge til mer presis informasjon i tittelen.

Du kan bruke paste()-funksjonen til å skrive ut statisk tekst og dynamisk tekst. Den grunnleggende syntaksen til paste() er:

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	

Eksempel:

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

Utgang:

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

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

Utgang:

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

Du kan legge til et dynamisk navn til grafen vår, nemlig gjennomsnittet av mpg.

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

Kode Forklaring

  • Du lager gjennomsnittet av mpg med mean(mtcars$mpg) lagret i mean_mpg variabel
  • Du bruker paste() med mean_mpg for å lage en dynamisk tittel som returnerer gjennomsnittsverdien til mpg

Utgang:

Legg til en tittel med et dynamisk navn

Legg til en undertekst

To ekstra detaljer kan gjøre grafen din mer eksplisitt. Du snakker om underteksten og bildeteksten. Undertittelen går rett under tittelen. Bildeteksten kan informere om hvem som gjorde beregningen og kilden til dataene.

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

Kode Forklaring

  • Inne i lab() la du til:
    • title = "Relation between Mile per hours and drat": Legg til tittel
    • undertittel = "Forholdsfordeling etter utstyrsklasse": Legg til undertittel
    • caption = "Forfatterens egen beregning: Legg til bildetekst
    • Du skiller hver ny informasjon med et komma, ,
  • Merk at du bryter kodelinjene. Det er ikke obligatorisk, og det hjelper bare å lese koden lettere

Utgang:

Legg til en undertekst

Gi nytt navn til x-aksen og y-aksen

Variabler i seg selv i datasettet er kanskje ikke alltid eksplisitte, eller ved konvensjon bruker _ når det er flere ord (dvs. GDP_CAP). Du vil ikke at et slikt navn skal vises i grafen din. Det er viktig å endre navn eller legge til flere detaljer, som enhetene.

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

Kode Forklaring

  • Inne i lab() la du til:
    • x = "Drat-definisjon": Endre navnet på x-aksen
    • y = "Mile per timer": Endre navnet på y-aksen

Utgang:

Gi nytt navn til x-aksen og y-aksen

Kontroller vekten

Du kan kontrollere skalaen til aksen.

Funksjonen seq() er praktisk når du trenger å lage en tallsekvens. Den grunnleggende syntaksen er:

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`	

For eksempel, hvis du vil opprette et område fra 0 til 12 med et trinn på 3, vil du ha fire tall, 0 4 8 12

seq(0, 12,4)

Utgang:

## [1]  0  4  8 12

Du kan kontrollere skalaen til x-aksen og y-aksen som nedenfor

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

Kode Forklaring

  • Funksjonen scale_y_continuous() kontrollerer y-aksen
  • Funksjonen scale_x_continuous() kontrollerer x-aksen.
  • Parameterbrudd styrer splittelsen av aksen. Du kan manuelt legge til nummersekvensen eller bruke seq()-funksjonen:
    • seq(1, 3.6, by = 0.2): Lag seks tall fra 2.4 til 3.4 med et trinn på 3
    • seq(1, 1.6, by = 0.1): Lag syv tall fra 1 til 1.6 med et trinn på 1

Utgang:

Kontroller vekten

tema

Til slutt lar R oss tilpasse plottet med forskjellige temaer. Biblioteket ggplot2 inkluderer åtte temaer:

  • theme_bw()
  • theme_light()
  • theme_classis()
  • theme_linedraw()
  • theme_dark()
  • theme_minimal()
  • tema_grå()
  • 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"
    )

Utgang:

tema

Lagre plott

Etter alle disse trinnene er det på tide å lagre og dele grafen din. Du legger til ggsave('NAVN PÅ FILEN) rett etter at du har plottet grafen, og den vil bli lagret på harddisken.

Grafen lagres i arbeidskatalogen. For å sjekke arbeidskatalogen kan du kjøre denne koden:

directory <-getwd()
directory

La oss plotte den fantastiske grafen din, lagre den og sjekke plasseringen

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

Utgang:

Lagre plott

ggsave("my_fantastic_plot.png")

Utgang:

## Saving 5 x 4 in image

Merknader: Kun for pedagogiske formål opprettet vi en funksjon kalt open_folder() for å åpne katalogmappen for deg. Du trenger bare å kjøre koden nedenfor og se hvor bildet er lagret. Du bør se en fil som heter 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)

Sammendrag

Du kan oppsummere argumentene for å lage et spredningsplott i tabellen nedenfor:

Målet Kode
Grunnleggende spredningsplott
ggplot(df, aes(x = x1, y = y)) + geom_point()
Spredningsplott med fargegruppe
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
Legg til tilpassede verdier
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
Legg til tittel
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
Legg til undertekst
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
Gi nytt navn til x
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
Gi nytt navn til y
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
Kontroller vekten
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)
Lag logger
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point()
tema
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic()
Spar
ggsave("my_fantastic_plot.png")

Oppsummer dette innlegget med: