Scatter Plot i R med ggplot2 (med exempel)

Grafer รคr den tredje delen av processen fรถr dataanalys. Den fรถrsta delen handlar om dataextraction, 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 ska du anvรคnda ggplot2-paketet. Detta paket รคr byggt pรฅ den konsekventa grunden i boken Grammar of graphics skriven av Wilkinson, 2005. ggplot2 รคr mycket flexibelt och innehรฅller mรฅnga teman och plotspecifikationer pรฅ en hรถg abs-nivรฅ.tracMed ggplot2 kan du inte plotta 3-dimensionell grafik och skapa interaktiv grafik.

I ggplot2 รคr en graf sammansatt av fรถljande argument:

  • datum
  • estetisk kartaping
  • 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()

Code Fรถ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)))

Code Fรถ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)))

Code Fรถrklaring

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

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

Code Fรถ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
  • kolumn = "#C42126": Code fรถr linjens rรถda fรคrg
  • 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"
         )

Code Fรถ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().
  • Code fรถr linjens rรถda fรคrg
  • 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	

Exempel:

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

Code Fรถ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"
    )

Code Fรถ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"
    )

Code Fรถ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"
    )

Code Fรถ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 Code
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()
Spara
ggsave("my_fantastic_plot.png")

Sammanfatta detta inlรคgg med: