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