Spreidingsplot in R met ggplot2 (met voorbeeld)

Grafieken vormen het derde deel van het proces van data-analyse. Het eerste deel gaat over data-extractie, waar het tweede deel over gaat het opschonen en manipuleren van de gegevens. Eindelijk moet de datawetenschapper dat misschien ook doen zijn resultaten grafisch communiceren.

De taak van de datawetenschapper kan worden bekeken in de volgende afbeelding

  • De eerste taak van een datawetenschapper is het definiëren van een onderzoeksvraag. Deze onderzoeksvraag is afhankelijk van de doelstellingen van het project.
  • Daarna is een van de meest prominente taken de feature-engineering. De datawetenschapper moet de gegevens verzamelen, manipuleren en opschonen
  • Wanneer deze stap is voltooid, kan hij beginnen met het verkennen van de dataset. Soms is het nodig om de oorspronkelijke hypothese te verfijnen en te veranderen als gevolg van een nieuwe ontdekking.

Spreidingsplot in R

  • Wanneer de verklarend analyse is bereikt, moet de datawetenschapper rekening houden met het vermogen van de lezer om dat te doen de onderliggende concepten en modellen begrijpen.
  • Zijn resultaten moeten worden gepresenteerd in een formaat dat alle belanghebbenden kunnen begrijpen. Een van de beste methoden om communiceren de resultaten zijn via a diagram.
  • Grafieken zijn een geweldig hulpmiddel om complexe analyses te vereenvoudigen.

ggplot2-pakket

Dit deel van de tutorial richt zich op het maken van grafieken/diagrammen met R.

In deze zelfstudie gaat u het ggplot2-pakket gebruiken. Dit pakket is gebouwd op de consistente basis van het boek Grammar of graphics geschreven door Wilkinson, 2005. ggplot2 is zeer flexibel, bevat veel thema's en plotspecificaties op een hoog abstractieniveau. Met ggplot2 kunt u geen driedimensionale afbeeldingen plotten en geen interactieve afbeeldingen maken.

In ggplot2 bestaat een grafiek uit de volgende argumenten:

  • gegevens
  • esthetische mapping
  • geometrisch voorwerp
  • statistische transformaties
  • balans
  • coördinatie systeem
  • positie aanpassingen
  • faceting

In de tutorial leert u hoe u deze argumenten kunt beheersen.

De basissyntaxis van ggplot2 is:

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

spreidingsdiagram

Laten we eens kijken hoe ggplot werkt met de mtcars-dataset. U begint met het plotten van een spreidingsdiagram van de mpg-variabele en de drat-variabele.

Basis spreidingsdiagram

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

Code Uitleg

  • U geeft eerst de dataset mtcars door aan ggplot.
  • Binnen het argument aes() voegt u de x-as en de y-as toe.
  • Het + teken betekent dat u wilt dat R de code blijft lezen. Het maakt de code leesbaarder door deze te breken.
  • Gebruik geom_point() voor het geometrische object.

Output:

Basisspreidingsdiagram

Spreidingsplot met groepen

Soms kan het interessant zijn om de waarden te onderscheiden op basis van een groep gegevens (dat wil zeggen gegevens op factorniveau).

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

Code Uitleg

  • De aes() binnen de geom_point() bepaalt de kleur van de groep. De groep moet een factorvariabele zijn. Zo reken je de variabele versnelling om in een factor.
  • Alles bij elkaar heb je de code aes(color = factor(gear)) die de kleur van de stippen verandert.

Output:

Spreidingsplot met groepen

As wijzigen

Het herschalen van de gegevens is een groot deel van het werk van datawetenschappers. In zeldzame gevallen komen de gegevens in een mooie belvorm. Eén oplossing om uw gegevens minder gevoelig te maken voor uitschieters is door ze opnieuw te schalen.

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

Code Uitleg

  • Je transformeert de x- en y-variabelen in log() rechtstreeks binnen de aes()-toewijzing.

Merk op dat elke andere transformatie kan worden toegepast, zoals standaardisatie of normalisatie.

Output:

As wijzigen

Spreidingsdiagram met aangepaste waarden

U kunt een ander informatieniveau aan de grafiek toevoegen. U kunt de aangepaste waarde van een lineaire regressie uitzetten.

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 Uitleg

  • grafiek: U slaat uw grafiek op in de variabele grafiek. Het is handig voor verder gebruik of om te complexe regels met codes te vermijden
  • Het argument stat_smooth() bestuurt de afvlakkingsmethode
  • methode = “lm”: lineaire regressie
  • col = “#C42126”: Codeer de rode kleur van de lijn
  • se = FALSE: Geef de standaardfout niet weer
  • maat = 1: de maat van de lijn is 1

Output:

Spreidingsdiagram met aangepaste waarden

Houd er rekening mee dat er andere afvlakkingsmethoden beschikbaar zijn

  • glm
  • gam
  • löss: standaardwaarde
  • rand

Voeg informatie toe aan de grafiek

Tot nu toe hebben we geen informatie toegevoegd aan de grafieken. Grafieken moeten informatief zijn. De lezer moet het verhaal achter de data-analyse zien door alleen naar de grafiek te kijken, zonder aanvullende documentatie te raadplegen. Daarom hebben grafieken goede labels nodig. U kunt labels toevoegen met de labs()functie.

De basissyntaxis voor lab() is:

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

Voeg een titel toe

Een verplichte informatie om toe te voegen is uiteraard een titel.

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

Code Uitleg

  • my_graph: Je gebruikt de grafiek die je hebt opgeslagen. Het voorkomt dat alle codes opnieuw worden geschreven telkens wanneer u nieuwe informatie aan de grafiek toevoegt.
  • Je wikkelt de titel in het lab().
  • Codeer de rode kleur van de lijn
  • se = FALSE: Geef de standaardfout niet weer
  • maat = 1: de maat van de lijn is 1

Output:

Voeg een titel toe

Voeg een titel toe met een dynamische naam

Een dynamische titel is handig om preciezere informatie aan de titel toe te voegen.

U kunt de functie paste() gebruiken om statische tekst en dynamische tekst af te drukken. De basissyntaxis van paste() is:

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	

Voorbeeld:

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"

U kunt een dynamische naam aan onze grafiek toevoegen, namelijk het gemiddelde van mpg.

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

Code Uitleg

  • Je maakt het gemiddelde van mpg met mean(mtcars$mpg) opgeslagen in de mean_mpg variabele
  • Je gebruikt paste() met mean_mpg om een ​​dynamische titel te maken die de gemiddelde waarde van mpg retourneert

Output:

Voeg een titel toe met een dynamische naam

Voeg een ondertitel toe

Twee extra details kunnen uw grafiek explicieter maken. Je hebt het over de ondertitel en het bijschrift. De ondertitel komt direct onder de titel te staan. Het bijschrift kan informatie geven over wie de berekening heeft uitgevoerd en wat de bron van de gegevens is.

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

Code Uitleg

  • In het lab() heb je toegevoegd:
    • title = “Relatie tussen mijl per uur en drat”: Titel toevoegen
    • ondertitel = “Relatie opgesplitst per uitrustingsklasse”: ondertitel toevoegen
    • caption = “Eigen berekening van de auteur: bijschrift toevoegen
    • Je scheidt elke nieuwe informatie met een komma, ,
  • Merk op dat u de coderegels afbreekt. Het is niet verplicht en het helpt alleen maar om de code gemakkelijker te lezen

Output:

Voeg een ondertitel toe

Hernoem de x-as en y-as

Variabelen zelf in de dataset zijn mogelijk niet altijd expliciet of gebruiken volgens conventie de _ wanneer er meerdere woorden zijn (bijv. GDP_CAP). U wilt niet dat een dergelijke naam in uw grafiek verschijnt. Het is belangrijk om de naam te wijzigen of meer details toe te voegen, zoals de eenheden.

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 Uitleg

  • In het lab() heb je toegevoegd:
    • x = “Dratdefinitie”: Wijzig de naam van de x-as
    • y = “Mijl per uur”: Wijzig de naam van de y-as

Output:

Hernoem de x-as en y-as

Beheers de weegschaal

U kunt de schaal van de as bepalen.

De functie seq() is handig als u een reeks getallen wilt maken. De basissyntaxis is:

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`	

Als u bijvoorbeeld een bereik van 0 tot 12 wilt maken met een stap van 3, krijgt u vier getallen: 0 4 8 12

seq(0, 12,4)

Output:

## [1]  0  4  8 12

U kunt de schaal van de x-as en y-as regelen, zoals hieronder

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 Uitleg

  • De functie scale_y_continuous() bestuurt de y-as
  • De functie scale_x_continuous() bestuurt de x-as.
  • De parametereinden regelen de splitsing van de as. U kunt de nummerreeks handmatig toevoegen of de functie seq() gebruiken:
    • seq(1, 3.6, by = 0.2): Creëer zes getallen van 2.4 tot 3.4 met een stap van 3
    • seq(1, 1.6, by = 0.1): Creëer zeven getallen van 1 tot 1.6 met een stap van 1

Output:

Beheers de weegschaal

Thema

Ten slotte stelt R ons in staat om de plot aan te passen met verschillende thema's. De bibliotheek ggplot2 bevat acht thema's:

  • thema_bw()
  • thema_licht()
  • thema_classis()
  • thema_linedraw()
  • thema_donker()
  • thema_minimaal()
  • thema_grijs()
  • thema_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:

Thema

Percelen opslaan

Na al deze stappen is het tijd om uw grafiek op te slaan en te delen. U voegt ggsave('NAAM VAN HET BESTAND) toe direct nadat u de grafiek heeft getekend en deze wordt op de harde schijf opgeslagen.

De grafiek wordt opgeslagen in de werkmap. Om de werkmap te controleren, kunt u deze code uitvoeren:

directory <-getwd()
directory

Laten we uw fantastische grafiek plotten, opslaan en de locatie controleren

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:

Percelen opslaan

ggsave("my_fantastic_plot.png")

Output:

## Saving 5 x 4 in image

Note: Alleen voor pedagogische doeleinden hebben we een functie gemaakt met de naam open_folder() om de directorymap voor u te openen. U hoeft alleen maar de onderstaande code uit te voeren en te zien waar de afbeelding is opgeslagen. Je zou een bestandsnaam my_fantastic_plot.png moeten zien.

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

Samenvatting

U kunt de argumenten voor het maken van een spreidingsdiagram samenvatten in de onderstaande tabel:

Objectief Code
Basis spreidingsdiagram
ggplot(df, aes(x = x1, y = y)) + geom_point()
Spreidingsdiagram met kleurgroep
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
Voeg gepaste waarden toe
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
Voeg titel toe
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
Ondertitel toevoegen
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
Hernoem x
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
Hernoem y
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
Beheers de weegschaal
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)
Maak logboeken
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point()
Thema
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic()
Bespaar
ggsave("my_fantastic_plot.png")