Scatter Plot i R med ggplot2 (med exempel)

Grafer är den tredje delen av processen för dataanalys. Den första delen handlar om datauttag, den andra delen behandlar rensa och manipulera data. Äntligen kan dataforskaren behöva kommunicera sina resultat grafiskt.

Datavetarens jobb kan ses på följande bild

  • Den första uppgiften för en dataforskare är att definiera en forskningsfråga. Denna forskningsfråga beror på projektets mål och mål.
  • Därefter är en av de mest framträdande uppgifterna funktionstekniken. Dataforskaren behöver samla in, manipulera och rensa data
  • När detta steg är klart kan han börja utforska datamängden. Ibland är det nödvändigt att förfina och ändra den ursprungliga hypotesen på grund av en ny upptäckt.

Scatter Plot i R

  • När förklarande analys uppnås måste datavetaren överväga läsarens kapacitet att förstå de bakomliggande koncepten och modellerna.
  • Hans resultat bör presenteras i ett format som alla intressenter kan förstå. En av de bästa metoderna att kommunicera resultatet är genom en diagram.
  • Grafer är ett otroligt verktyg för att förenkla komplex analys.

ggplot2-paketet

Den här delen av handledningen fokuserar på hur man gör grafer/diagram med R.

I den här handledningen kommer du att använda paketet ggplot2. Det här paketet är byggt på den konsekventa underliggande boken Grammar of graphics skriven av Wilkinson, 2005. ggplot2 är mycket flexibel, innehåller många teman och plotspecifikationer på en hög abstraktionsnivå. Med ggplot2 kan du inte rita 3-dimensionell grafik och skapa interaktiv grafik.

I ggplot2 är en graf sammansatt av följande argument:

  • datum
  • estetisk kartläggning
  • geometriska objekt
  • statistiska transformationer
  • skalor
  • koordinatsystem
  • lägesjusteringar
  • fasettering

Du kommer att lära dig hur du kontrollerar dessa argument i handledningen.

Den grundläggande syntaxen för ggplot2 är:

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

Låt oss se hur ggplot fungerar med mtcars dataset. Du börjar med att plotta en scatterplot av mpg-variabeln och drat-variabeln.

Grundläggande scatter plot

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

Kodförklaring

  • Du skickar först datasetet mtcars till ggplot.
  • Inuti aes()-argumentet lägger du till x-axeln och y-axeln.
  • Tecknet + betyder att du vill att R ska fortsätta läsa koden. Det gör koden mer läsbar genom att bryta den.
  • Använd geom_point() för det geometriska objektet.

Produktion:

Grundläggande spridningsdiagram

Scatter plot med grupper

Ibland kan det vara intressant att särskilja värdena med en grupp data (dvs. data på faktornivå).

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

Kodförklaring

  • Aes() inuti geom_point() styr färgen på gruppen. Gruppen ska vara en faktorvariabel. Således omvandlar du den variabla växeln till en faktor.
  • Sammantaget har du koden aes(color = factor(gear)) som ändrar färgen på prickarna.

Produktion:

Scatter Plot med grupper

Byt axel

Skala om data är en stor del av dataforskarjobbet. I sällsynta fall kommer data i en fin klockform. En lösning för att göra din data mindre känslig för extremvärden är att skala om dem.

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

Kodförklaring

  • Du transformerar x- och y-variablerna i log() direkt inuti aes()-mappningen.

Observera att vilken annan transformation som helst kan tillämpas såsom standardisering eller normalisering.

Produktion:

Byt axel

Spridningsdiagram med anpassade värden

Du kan lägga till en annan nivå av information till grafen. Du kan plotta det anpassade värdet för en linjä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

Kodförklaring

  • graf: Du lagrar din graf i den variabla grafen. Det är användbart för vidare användning eller för att undvika alltför komplicerade koder
  • Argumentet stat_smooth() styr för utjämningsmetoden
  • metod = "lm": Linjär regression
  • col = "#C42126": Kod för den röda färgen på linjen
  • se = FALSK: Visa inte standardfelet
  • storlek = 1: storleken på linjen är 1

Produktion:

Scatter Plot med anpassade värden

Observera att andra utjämningsmetoder finns tillgängliga

  • glm
  • GAM
  • löss: standardvärde
  • fälg

Lägg till information till grafen

Än så länge har vi inte lagt till information i graferna. Graferna måste vara informativa. Läsaren bör se historien bakom dataanalysen bara genom att titta på grafen utan att hänvisa till ytterligare dokumentation. Därför behöver grafer bra etiketter. Du kan lägga till etiketter med labs()-funktionen.

Den grundläggande syntaxen för lab() är:

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

Lägg till en titel

En obligatorisk information att lägga till är uppenbarligen en titel.

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

Kodförklaring

  • my_graph: Du använder grafen du lagrade. Det undviker att skriva om alla koder varje gång du lägger till ny information i grafen.
  • Du lindar in titeln i lab().
  • Kod för den röda färgen på linjen
  • se = FALSK: Visa inte standardfelet
  • storlek = 1: storleken på linjen är 1

Produktion:

Lägg till en titel

Lägg till en titel med ett dynamiskt namn

En dynamisk titel är användbar för att lägga till mer exakt information i titeln.

Du kan använda funktionen paste() för att skriva ut statisk text och dynamisk text. Den grundläggande syntaxen för paste() är:

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	

Exempelvis:

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

Produktion:

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

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

Produktion:

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

Du kan lägga till ett dynamiskt namn till vår graf, nämligen genomsnittet 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)
)

Kodförklaring

  • Du skapar medelvärdet av mpg med mean(mtcars$mpg) lagrad i mean_mpg variabel
  • Du använder paste() med mean_mpg för att skapa en dynamisk titel som returnerar medelvärdet för mpg

Produktion:

Lägg till en titel med ett dynamiskt namn

Lägg till en undertext

Ytterligare två detaljer kan göra din graf mer explicit. Du pratar om undertexten och bildtexten. Undertexten går precis under rubriken. Bildtexten kan informera om vem som gjorde beräkningen och källan till data.

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

Kodförklaring

  • Inuti lab() lade du till:
    • title = "Relation mellan Mile per hours och drat": Lägg till titel
    • subtitle = "Relationsuppdelning efter växelklass": Lägg till underrubrik
    • caption = “Författarens egen beräkning: Lägg till bildtext
    • Du separerar varje ny information med ett kommatecken, ,
  • Observera att du bryter kodraderna. Det är inte obligatoriskt, och det hjälper bara att läsa koden lättare

Produktion:

Lägg till en undertext

Byt namn på x-axeln och y-axeln

Variabler i sig i datasetet kanske inte alltid är explicita eller enligt konventionen använder _ när det finns flera ord (dvs. GDP_CAP). Du vill inte att ett sådant namn ska visas i din graf. Det är viktigt att byta namn eller lägga till fler detaljer, som enheterna.

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

Kodförklaring

  • Inuti lab() lade du till:
    • x = "Drat definition": Ändra namnet på x-axeln
    • y = "Mile per hours": Ändra namnet på y-axeln

Produktion:

Byt namn på x-axel och y-axel

Kontrollera vågen

Du kan styra axelns skala.

Funktionen seq() är praktisk när du behöver skapa en talföljd. Grundsyntaxen är:

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`	

Om du till exempel vill skapa ett intervall från 0 till 12 med steget 3, har du fyra siffror, 0 4 8 12

seq(0, 12,4)

Produktion:

## [1]  0  4  8 12

Du kan styra skalan för x-axeln och y-axeln enligt nedan

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

Kodförklaring

  • Funktionen scale_y_continuous() styr y-axeln
  • Funktionen scale_x_continuous() styr x-axeln.
  • Parameterbrytningarna styr axeldelningen. Du kan manuellt lägga till nummersekvensen eller använda seq()-funktionen:
    • seq(1, 3.6, by = 0.2): Skapa sex tal från 2.4 till 3.4 med steget 3
    • seq(1, 1.6, by = 0.1): Skapa sju tal från 1 till 1.6 med steget 1

Produktion:

Kontrollera vågen

tema

Slutligen tillåter R oss att anpassa plot med olika teman. Biblioteket ggplot2 innehåller åtta teman:

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

Produktion:

tema

Spara tomter

Efter alla dessa steg är det dags att spara och dela din graf. Du lägger till ggsave('NAMN PÅ FILEN) direkt efter att du ritat grafen och den kommer att lagras på hårddisken.

Grafen sparas i arbetskatalogen. För att kontrollera arbetskatalogen kan du köra den här koden:

directory <-getwd()
directory

Låt oss rita upp din fantastiska graf, spara den och kontrollera platsen

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

Produktion:

Spara tomter

ggsave("my_fantastic_plot.png")

Produktion:

## Saving 5 x 4 in image

Anmärkningar: Endast för pedagogiska ändamål skapade vi en funktion som heter open_folder() för att öppna katalogmappen åt dig. Du behöver bara köra koden nedan och se var bilden är lagrad. Du bör se en fil med namnet 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)

Sammanfattning

Du kan sammanfatta argumenten för att skapa ett spridningsdiagram i tabellen nedan:

Mål Koda
Grundläggande scatter plot
ggplot(df, aes(x = x1, y = y)) + geom_point()
Scatter plot med färggrupp
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
Lägg till inpassade värden
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
Lägg till titel
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
Lägg till undertext
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
Byt namn på x
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
Byt namn på y
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
Kontrollera vågen
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)
Skapa loggar
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point()
tema
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic()
Save
ggsave("my_fantastic_plot.png")