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












