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.

Bodový spiknutí v R

  • 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:

Základní bodový graf

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:

Bodový graf se skupinami

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:

Změnit osu

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:

Bodový graf s přizpůsobenými hodnotami

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

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 titul s dynamickým názvem

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řidejte titulek

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:

Přejmenujte osu x a osu y

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:

Ovládejte váhy

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:

téma

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:

Uložit pozemky

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