Bodový graf v R pomocí ggplot2 (s příkladem)
Grafy jsou třetí částí procesu analýzy dat. První část je o extrakce dat, druhá část se zabývá čištění a manipulaci s daty. Konečně to může potřebovat datový vědec sdělovat své výsledky graficky.
Práci datového vědce si můžete prohlédnout na následujícím obrázku
- Prvním úkolem datového vědce je definovat výzkumnou otázku. Tato výzkumná otázka závisí na cílech a cílech projektu.
- Poté je jedním z nejvýznamnějších úkolů inženýrství funkcí. Datový vědec potřebuje shromažďovat, manipulovat a čistit data
- Po dokončení tohoto kroku může začít zkoumat datovou sadu. Někdy je nutné původní hypotézu upřesnit a změnit kvůli novému objevu.
- Když vysvětlující Je-li dosaženo analýzy, musí datový vědec zvážit kapacitu čtenáře pochopit základní koncepty a modely.
- Jeho výsledky by měly být prezentovány ve formátu, kterému budou rozumět všechny zúčastněné strany. Jedna z nejlepších metod, jak komunikovat výsledky jsou přes a graf.
- Grafy jsou neuvěřitelným nástrojem pro zjednodušení komplexní analýzy.
balíček ggplot2
Tato část tutoriálu se zaměřuje na to, jak vytvářet grafy/grafy pomocí R.
V tomto tutoriálu budete používat balíček ggplot2. Tento balíček je postaven na konzistentním základu knihy Gramatika grafiky napsané Wilkinsonem, 2005. ggplot2 je velmi flexibilní, zahrnuje mnoho témat a specifikaci zápletky na vysoké úrovni abstrakce. S ggplot2 nemůžete vykreslovat 3-rozměrnou grafiku a vytvářet interaktivní grafiku.
V ggplot2 se graf skládá z následujících argumentů:
- datum
- estetické mapování
- geometrický objekt
- statistické transformace
- váhy
- souřadnicový systém
- úpravy polohy
- fasetování
V tutoriálu se dozvíte, jak tyto argumenty ovládat.
Základní syntaxe ggplot2 je:
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()`
Bodový diagram
Podívejme se, jak funguje ggplot s datovou sadou mtcars. Začnete vykreslením bodového grafu proměnných mpg a drat.
Základní bodový graf
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Vysvětlení kódu
- Nejprve předáte datovou sadu mtcars do ggplot.
- Do argumentu aes() přidáte osu x a osu y.
- Znak + znamená, že chcete, aby R pokračoval ve čtení kódu. Dělá kód čitelnějším tím, že jej prolomí.
- Pro geometrický objekt použijte geom_point().
Výstup:
Bodový graf se skupinami
Někdy může být zajímavé rozlišit hodnoty podle skupiny dat (tj. dat na úrovni faktorů).
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Vysvětlení kódu
- Aes() uvnitř geom_point() řídí barvu skupiny. Skupina by měla být proměnnou faktoru. Tak převedete variabilní převod v faktoru.
- Dohromady máte kód aes(color = factor(gear)), který mění barvu teček.
Výstup:
Změnit osu
Změna měřítka dat je velkou součástí práce datových vědců. Ve vzácných případech se data objevují v pěkném tvaru zvonu. Jedním z řešení, jak snížit citlivost vašich dat na odlehlé hodnoty, je změnit jejich měřítko.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Vysvětlení kódu
- Proměnné x a y transformujete v log() přímo v mapování aes().
Všimněte si, že lze použít jakoukoli jinou transformaci, jako je standardizace nebo normalizace.
Výstup:
Bodový graf s proloženými hodnotami
Do grafu můžete přidat další úroveň informací. Můžete vykreslit proloženou hodnotu lineární regrese.
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
Vysvětlení kódu
- graf: Uložíte svůj graf do proměnného grafu. Je to užitečné pro další použití nebo se vyhnete příliš složité řadě kódů
- Argument stat_smooth() řídí metodu vyhlazování
- metoda = „lm“: Lineární regrese
- col = “#C42126”: Kód pro červenou barvu čáry
- se = FALSE: Nezobrazovat standardní chybu
- velikost = 1: velikost řádku je 1
Výstup:
Všimněte si, že jsou k dispozici i jiné metody vyhlazování
- glm
- gam
- spraš: výchozí hodnota
- lem
Přidejte informace do grafu
Zatím jsme nepřidali informace do grafů. Grafy musí být informativní. Čtenář by měl vidět příběh analýzy dat pouhým pohledem na graf bez odkazování na další dokumentaci. Proto grafy potřebují dobré popisky. Štítky můžete přidat pomocí funkce labs().
Základní syntaxe pro lab() je:
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")
Přidat titul
Jednou z povinných informací, které je třeba přidat, je samozřejmě název.
my_graph + labs( title = "Plot Mile per hours and drat, in log" )
Vysvětlení kódu
- my_graph: Používáte graf, který jste si uložili. Vyhne se přepisování všech kódů pokaždé, když do grafu přidáte nové informace.
- Titulek zabalíte do lab().
- Kód pro červenou barvu čáry
- se = FALSE: Nezobrazovat standardní chybu
- velikost = 1: velikost řádku je 1
Výstup:
Přidejte název s dynamickým názvem
Dynamický název je užitečný pro přidání přesnějších informací do názvu.
K tisku statického a dynamického textu můžete použít funkci paste(). Základní syntaxe paste() je:
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
Příklad:
A <-2010 paste("The first year is", A)
Výstup:
## [1] "The first year is 2010"
B <-2018 paste("The first year is", A, "and the last year is", B)
Výstup:
## [1] "The first year is 2010 and the last year is 2018"
Do našeho grafu můžete přidat dynamický název, konkrétně průměr mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Vysvětlení kódu
- Průměr mpg vytvoříte s mean(mtcars$mpg) uloženým v proměnné mean_mpg
- Pomocí paste() s mean_mpg vytvoříte dynamický název vracející střední hodnotu mpg
Výstup:
Přidejte podnadpis
Dva další podrobnosti mohou váš graf učinit explicitnějším. Mluvíte o titulcích a titulcích. Podnadpis je hned pod titulkem. Titulek může informovat o tom, kdo provedl výpočet a o zdroji dat.
my_graph + labs( title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Vysvětlení kódu
- Uvnitř lab() jste přidali:
- title = “Vztah mezi mílí za hodinu a tahem”: Přidat název
- podtitul = “Rozdělení vztahu podle třídy výbavy”: Přidat podnadpis
- caption = “Vlastní výpočet autorů: Přidejte popisek
- Každou novou informaci oddělujete čárkou, ,
- Všimněte si, že přerušíte řádky kódu. Není to povinné a pomáhá to pouze ke snadnějšímu čtení kódu
Výstup:
Přejmenujte osu x a osu y
Samotné proměnné v datové sadě nemusí být vždy explicitní nebo podle konvence použijte _, pokud existuje více slov (tj. GDP_CAP). Nechcete, aby se takové jméno objevilo ve vašem grafu. Je důležité změnit název nebo přidat další podrobnosti, jako jsou jednotky.
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" )
Vysvětlení kódu
- Uvnitř lab() jste přidali:
- x = “Definice výkresu”: Změna názvu osy x
- y = „Míle za hodiny“: Změna názvu osy y
Výstup:
Ovládejte váhy
Můžete ovládat měřítko osy.
Funkce seq() je vhodná, když potřebujete vytvořit posloupnost čísel. Základní syntaxe je:
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`
Pokud například chcete vytvořit rozsah od 0 do 12 s krokem 3, budete mít čtyři čísla, 0 4 8 12
seq(0, 12,4)
Výstup:
## [1] 0 4 8 12
Můžete ovládat měřítko osy x a y, jak je uvedeno níže
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" )
Vysvětlení kódu
- Funkce scale_y_continuous() řídí osa y
- Funkce scale_x_continuous() řídí osa x.
- Parametr breaks řídí rozdělení osy. Posloupnost čísel můžete přidat ručně nebo použít funkci seq():
- seq(1, 3.6, by = 0.2): Vytvořte šest čísel od 2.4 do 3.4 s krokem 3
- seq(1, 1.6, by = 0.1): Vytvořte sedm čísel od 1 do 1.6 s krokem 1
Výstup:
téma
Nakonec nám R umožňuje přizpůsobit děj s různými tématy. Knihovna ggplot2 obsahuje osmičky témat:
- 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" )
Výstup:
Uložit pozemky
Po všech těchto krocích je čas uložit a sdílet graf. Po vykreslení grafu přidáte ggsave('NAME OF THE SOUBOR) a bude uložen na pevný disk.
Graf se uloží do pracovního adresáře. Chcete-li zkontrolovat pracovní adresář, můžete spustit tento kód:
directory <-getwd() directory
Pojďme nakreslit váš fantastický graf, uložit jej a zkontrolovat umístění
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" )
Výstup:
ggsave("my_fantastic_plot.png")
Výstup:
## Saving 5 x 4 in image
Pozor: Pouze pro pedagogické účely jsme vytvořili funkci nazvanou open_folder(), která vám otevře složku adresáře. Stačí spustit níže uvedený kód a podívat se, kde je obrázek uložen. Měli byste vidět názvy souborů 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)
Shrnutí
Argumenty pro vytvoření bodového grafu můžete shrnout v tabulce níže:
Objektivní | Kód |
---|---|
Základní bodový graf |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
Bodový graf se skupinou barev |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
Přidejte přizpůsobené hodnoty |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
Přidat titulek |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
Přidat titulky |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
Přejmenovat x |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
Přejmenovat y |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
Ovládejte měřítko |
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) |
Vytvářejte protokoly |
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point() |
téma |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
Uložit |
ggsave("my_fantastic_plot.png") |