Scatter Plot i R ved hjælp af ggplot2 (med eksempel)

Grafer er den tredje del af processen med dataanalyse. Første del handler om dataudtræk, anden del omhandler rensning og manipulation af data. Endelig kan dataforskeren blive nødt til det kommunikere sine resultater grafisk.

Dataforskerens job kan gennemgås på det følgende billede

  • En dataforskers første opgave er at definere et forskningsspørgsmål. Dette forskningsspørgsmål afhænger af projektets mål og mål.
  • Derefter er en af ​​de mest fremtrædende opgaver feature engineering. Dataforskeren skal indsamle, manipulere og rense dataene
  • Når dette trin er gennemført, kan han begynde at udforske datasættet. Nogle gange er det nødvendigt at forfine og ændre den oprindelige hypotese på grund af en ny opdagelse.

Scatter Plot i R

  • Når forklarende analyse er opnået, skal dataforskeren overveje læserens kapacitet til forstå de bagvedliggende koncepter og modeller.
  • Hans resultater bør præsenteres i et format, som alle interessenter kan forstå. En af de bedste metoder til kommunikere resultaterne er gennem en graf.
  • Grafer er et utroligt værktøj til at forenkle komplekse analyser.

ggplot2-pakken

Denne del af selvstudiet fokuserer på, hvordan man laver grafer/diagrammer med R.

I denne vejledning skal du bruge pakken ggplot2. Denne pakke er bygget på det konsekvente grundlag for bogen Grammar of graphics skrevet af Wilkinson, 2005. ggplot2 er meget fleksibel, inkorporerer mange temaer og plotspecifikationer på et højt abstraktionsniveau. Med ggplot2 kan du ikke plotte 3-dimensionel grafik og skabe interaktiv grafik.

I ggplot2 er en graf sammensat af følgende argumenter:

  • data
  • æstetisk kortlægning
  • geometrisk objekt
  • statistiske transformationer
  • skalaer
  • koordinatsystem
  • positionsjusteringer
  • facettering

Du vil lære, hvordan du styrer disse argumenter i selvstudiet.

Den grundlæggende syntaks for 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

Lad os se, hvordan ggplot fungerer med mtcars-datasættet. Du starter med at plotte et scatterplot af variablerne mpg og drat.

Grundlæggende scatter plot

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

Kode Forklaring

  • Du sender først datasættet mtcars til ggplot.
  • Inde i aes()-argumentet tilføjer du x-aksen og y-aksen.
  • + tegnet betyder, at du vil have R til at blive ved med at læse koden. Det gør koden mere læsbar ved at bryde den.
  • Brug geom_point() til det geometriske objekt.

Output:

Grundlæggende scatter plot

Spredningsplot med grupper

Nogle gange kan det være interessant at skelne værdierne ved en gruppe af data (dvs. data på faktorniveau).

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

Kode Forklaring

  • aes() inde i geom_point() styrer farven på gruppen. Gruppen skal være en faktorvariabel. Dermed omregner du det variable gear i en faktor.
  • Alt i alt har du koden aes(farve = faktor(gear)), der ændrer farven på prikkerne.

Output:

Spredningsplot med grupper

Skift akse

Omskalering af data er en stor del af data scientist-jobbet. I sjældne tilfælde kommer data i en flot klokkeform. En løsning til at gøre dine data mindre følsomme over for outliers er at omskalere dem.

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

Kode Forklaring

  • Du transformerer x- og y-variablerne i log() direkte inde i aes()-tilknytningen.

Bemærk, at enhver anden transformation kan anvendes, såsom standardisering eller normalisering.

Output:

Skift akse

Spredningsplot med tilpassede værdier

Du kan tilføje et andet informationsniveau til grafen. Du kan plotte den tilpassede værdi af en lineær regression.

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 gemmer din graf i den variable graf. Det er nyttigt til videre brug eller undgå for komplekse koder
  • Argumentet stat_smooth() kontrollerer udjævningsmetoden
  • metode = "lm": Lineær regression
  • col = "#C42126": Kode for linjens røde farve
  • se = FALSK: Vis ikke standardfejlen
  • størrelse = 1: linjens størrelse er 1

Output:

Spredningsplot med tilpassede værdier

Bemærk, at andre udjævningsmetoder er tilgængelige

  • GLM
  • gam
  • loess: standardværdi
  • rand

Tilføj oplysninger til grafen

Indtil videre har vi ikke tilføjet oplysninger i graferne. Grafer skal være informative. Læseren bør se historien bag dataanalysen blot ved at se på grafen uden at henvise til yderligere dokumentation. Derfor har grafer brug for gode etiketter. Du kan tilføje etiketter med labs()-funktionen.

Den grundlæggende syntaks 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")	

Tilføj en titel

En obligatorisk information at tilføje er naturligvis en titel.

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

Kode Forklaring

  • my_graph: Du bruger den graf du har gemt. Det undgår at omskrive alle koderne, hver gang du tilføjer ny information til grafen.
  • Du pakker titlen inde i lab().
  • Kode for den røde farve på linjen
  • se = FALSK: Vis ikke standardfejlen
  • størrelse = 1: linjens størrelse er 1

Output:

Tilføj en titel

Tilføj en titel med et dynamisk navn

En dynamisk titel er nyttig til at tilføje mere præcise oplysninger i titlen.

Du kan bruge funktionen paste() til at udskrive statisk tekst og dynamisk tekst. Den grundlæggende syntaks for 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)

Output:

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

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

Output:

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

Du kan tilføje et dynamisk navn til vores graf, nemlig gennemsnittet af 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 opretter gennemsnittet af mpg med mean(mtcars$mpg) gemt i mean_mpg variabel
  • Du bruger paste() med mean_mpg til at skabe en dynamisk titel, der returnerer middelværdien af ​​mpg

Output:

Tilføj en titel med et dynamisk navn

Tilføj en undertekst

To yderligere detaljer kan gøre din graf mere eksplicit. Du taler om underteksten og billedteksten. Undertitlen går lige under titlen. Billedteksten kan informere om, hvem der har foretaget 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

  • Inde i lab() tilføjede du:
    • title = "Forholdet mellem Mile per hours og drat": Tilføj titel
    • undertitel = "Forhold opdelt efter gearklasse": Tilføj undertekst
    • caption = "Forfatterens egen beregning: Tilføj billedtekst
    • Du adskiller hver ny information med et komma, ,
  • Bemærk, at du bryder kodelinjerne. Det er ikke obligatorisk, og det hjælper kun at læse koden nemmere

Output:

Tilføj en undertekst

Omdøb x-aksen og y-aksen

Selve variablerne i datasættet er måske ikke altid eksplicitte eller bruger konventionelt _, når der er flere ord (dvs. GDP_CAP). Du ønsker ikke, at et sådant navn skal vises i din graf. Det er vigtigt at ændre navnet eller tilføje flere detaljer, f.eks. enhederne.

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

  • Inde i lab() tilføjede du:
    • x = "Drat definition": Skift navnet på x-aksen
    • y = "Mile pr. timer": Skift navnet på y-aksen

Output:

Omdøb x-akse og y-akse

Styr vægten

Du kan styre aksens skala.

Funktionen seq() er praktisk, når du skal oprette en talfølge. Den grundlæggende syntaks 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 oprette et interval fra 0 til 12 med et trin på 3, vil du have fire tal, 0 4 8 12

seq(0, 12,4)

Output:

## [1]  0  4  8 12

Du kan styre skalaen af ​​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

  • Funktionen scale_y_continuous() styrer y-aksen
  • Funktionen scale_x_continuous() styrer x-aksen.
  • Parameterbrud styrer opdelingen af ​​aksen. Du kan manuelt tilføje rækkefølgen af ​​tal eller bruge seq()-funktionen:
    • seq(1, 3.6, by = 0.2): Opret seks tal fra 2.4 til 3.4 med et trin på 3
    • seq(1, 1.6, ved = 0.1): Opret syv tal fra 1 til 1.6 med et trin på 1

Output:

Styr vægten

Tema

Endelig giver R os mulighed for at tilpasse plot med forskellige temaer. Biblioteket ggplot2 indeholder otte 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"
    )

Output:

Tema

Gem plots

Efter alle disse trin er det tid til at gemme og dele din graf. Du tilføjer ggsave('NAVN PÅ FILEN) lige efter du har plottet grafen, og den vil blive gemt på harddisken.

Grafen gemmes i arbejdsbiblioteket. For at tjekke arbejdsbiblioteket kan du køre denne kode:

directory <-getwd()
directory

Lad os plotte din fantastiske graf, gemme den og tjekke placeringen

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

Output:

Gem plots

ggsave("my_fantastic_plot.png")

Output:

## Saving 5 x 4 in image

Bemærk: Kun til pædagogiske formål oprettede vi en funktion kaldet open_folder() for at åbne mappen for dig. Du skal blot køre koden nedenfor og se, hvor billedet er gemt. Du bør se en fil med navnet 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)

Resumé

Du kan opsummere argumenterne for at skabe et punktplot i tabellen nedenfor:

Objektiv Kode
Grundlæggende scatter plot
ggplot(df, aes(x = x1, y = y)) + geom_point()
Spredningsplot med farvegruppe
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
Tilføj tilpassede værdier
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
Tilføj titel
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
Tilføj undertekst
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
Omdøb x
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
Omdøb y
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
Styr skalaen
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)
Opret logs
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point()
Tema
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic()
Gem
ggsave("my_fantastic_plot.png")