Bodový graf v R s použitím ggplot2 s příkladem

⚡ Chytré shrnutí

Bodový graf v R s použitím ggplot2 mapuje dvě spojité proměnné na osy x a y pomocí geom_point(). Tento návod zahrnuje skupinyping podle barvy, logaritmických transformací, fitovaných regresních čar, popisků, fazetování, oprav překrytí, měřítek, témat a ukládání.

  • 📍 Základní syntaxe: ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point() vytvoří graf z dat, mapypinga geometrie.
  • 🎨 Skupinové barvení: Funkce aes(color = factor(gear)) uvnitř geom_point() rozděluje body do jedné barvy na úroveň faktoru.
  • 📈 Trendové linie: Funkce stat_smooth(method = „lm“) překryje fitovanou regresní přímku a se = FALSE odstraní pásmo spolehlivosti.
  • 🗂️ Fasování: facet_wrap() vykreslí jeden panel na skupinu ve sdílené škále, což je lepší než shlukování všech sérií do jednoho grafu.
  • 🔁 Překreslení: Snižte alfa hodnotu, upravte chvění bodů nebo přepněte na geom_hex(), když se značky hromadí na sobě.
  • 💾 Vývozní: ggsave(“plot.png”, width = 8, height = 5, dpi = 300) zapíše poslední graf do pracovního adresáře.

Bodový graf v R pomocí ggplot2

Proč jsou grafy důležité při analýze dat

Grafy jsou třetí částí procesu analýzy dat. První část je o data extracvání, 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.

Pracovní postup datového vědce je shrnut na obrázku níže.

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

Zbytek tohoto tutoriálu se věnuje tvorbě těchto grafů pomocí balíčku ggplot2.

Balíček ggplot2

Tento tutoriál se zaměřuje na vytváření grafů v R pomocí ggplot2.

V tomto tutoriálu použijete balíček ggplot2. Balíček implementuje Gramatickou gramatiku grafiky popsanou Lelandem Wilkinsonem v roce 2005. ggplot2 je flexibilní, dodává se s mnoha šablonami a umožňuje specifikovat graf s vysokou úrovní absence.tracce. Upozorňujeme, že nevytváří trojrozměrnou ani interaktivní grafiku; ty vyžadují balíčky jako plotly nebo rgl.

V ggplot2 se graf skládá z následujících argumentů:

  • datum
  • estetická mapaping
  • 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()`

Jak vytvořit bodový graf v R

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

Code Vysvětlení

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

Code Vysvětlení

  • Funkce aes() uvnitř funkce geom_point() řídí barvu každé skupiny. Skupinaping Proměnná musí být faktor, takže gear je zabalen do factor().
  • Dohromady máte kód aes(color = factor(gear)), který mění barvu teček.

Výstup:

Bodový graf se skupinami

Změna měřítka osy pomocí logaritmické transformace

Přeškálování dat je velkou součástí práce analytika, protože nezpracované proměnné zřídka přicházejí v úhledném tvaru. Logaritmování je jedním ze způsobů, jak zkomprimovat extrémní hodnoty a snížit citlivost grafu na odlehlé hodnoty.

ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
    geom_point(aes(color = factor(gear)))

Code Vysvětlení

  • Proměnné x a y transformujete v log() přímo uvnitř mapy aes().ping.

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 překrýt fitované hodnoty 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

Code Vysvětlení

  • my_graph: graf je uložen v objektu my_graph, takže v pozdějších krocích lze přidat vrstvy bez opakování celého volání
  • Argument stat_smooth() řídí metodu vyhlazování
  • metoda = „lm“: Lineární regrese
  • sloupec = „#C42126“: Code pro červenou barvu čáry
  • se = FALSE: Nezobrazovat standardní chybu
  • size = 1: tloušťka čáry. V ggplot2 3.4.0 a novějších verzích byl tento argument pro geometrie čar přejmenován na linewidth.

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 pro méně než 1 000 pozorování
  • rlm: robustní lineární model z balíčku MASS

Než začnete upravovat graf, je vhodné vědět, kdy je bodový graf vůbec tou správnou volbou.

Bodový graf vs. spojnicový graf vs. Bubble Graf v R

Všechny tři zobrazují graficky dvě spojité proměnné proti sobě, takže volba závisí na tom, co si čtenář odnese.

Kritéria Bodový diagram linka Graf Bubble Graf
Výstavy Korelace mezi dvěma proměnnými Změna jedné proměnné podél uspořádané osy Korelace plus třetí magnituda
Osa X Jakákoli spojitá proměnná Obvykle časová nebo jiná uspořádaná stupnice Jakákoli spojitá proměnná
Pořadí bodů Irelevantní Kritické body jsou propojeny Irelevantní
Třetí proměnná Prostřednictvím barvy nebo tvaru Prostřednictvím samostatných linek Velikost skrz bod
volání ggplot2 geom_point() geom_line() geom_point(aes(velikost = z))

Spojování bodů rozptylu čarou, když osa x nemá přirozené uspořádání, je častou chybou: implikuje to sekvenci, která neexistuje. Funkci geom_line() rezervujte pro uspořádané osy, jako jsou data. Pro rozdělení jedné proměnné použijte funkci krabicový graf namísto.

Přidejte informace do grafu

Grafy zatím neobsahují žádný vysvětlující text. Čtenář by měl být schopen pochopit příběh pouze z dat v grafu, bez nutnosti konzultace další dokumentace, což znamená, že graf potřebuje dobré popisky. Popisky můžete přidat pomocí funkce labs().

Základní syntaxe pro labs() je:

labs(title = "Hello Guru99")
arguments:
- title: Main title displayed above the plot
- subtitle: Secondary line below the title
- caption: Note below the plot, usually the data source
- x: Rename the x-axis
- y: Rename the y-axis
- color / fill: Rename the legend

Example: labs(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"
         )

Code Vysvětlení

  • 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.
  • Název zabalíte dovnitř labs().

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

Code Vysvětlení

  • 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ší detaily graf činí explicitnějším. Mluvíme o podtitulku a popisku. Podtitulek se nachází hned pod názvem. Popisek 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"
    )

Code Vysvětlení

  • Uvnitř labs() 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

Názvy sloupců jsou zřídkakdy vhodné pro prezentaci. Často se zkracují nebo se mezi slovy používají podtržítka, jako v GDP_CAP. Přejmenujte je v grafu a přidejte jednotky tam, kde jsou důležité.

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 Vysvětlení

  • Uvnitř labs() 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`	

Například rozsah od 0 do 12 s krokem 4 vrací čtyři čísla: 0, 4, 8 a 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"
    )

Code Vysvětlení

  • 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ří sekvenci od 1 do 3.6 v krocích po 0.2, tj. 14 bodů přerušení.
    • seq(1, 1.6, by = 0.1): Vytvořte sedm čísel od 1 do 1.6 v krocích po 0.1.

Výstup:

Ovládejte váhy

Téma

Nakonec vám ggplot2 umožňuje změnit styl celého grafu pomocí jediné funkce motivu. Součástí balíčku je osm kompletních motivů:

  • theme_bw()
  • theme_light()
  • theme_classic()
  • 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 váš graf. Ihned po vykreslení zavolejte funkci ggsave(„název_souboru.png“) a obrázek se zapíše na disk.

Graf se uloží do pracovního adresáře. Chcete-li zkontrolovat pracovní adresář, můžete spustit tento kód:

directory <- getwd()
directory

Vykreslete hotový graf, uložte ho a zkontrolujte, kde se dostal:

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

Hodnocení: 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)

Jak vytvořit fazetované bodové grafy v R pomocí facet_wrap()

Fasetování je jednou z osmi komponent ggplot2 uvedených výše a je nejčistším řešením pro přeplněný graf. Místo vměstnání každé skupiny do jednoho panelu ggplot2 vykresluje malý násobek pro každou úroveň proměnné, a to vše ve stejném měřítku, takže panely zůstávají srovnatelné.

# One panel per gear count
ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point() +
    facet_wrap(~ gear) +
    theme_classic()

Většinu práce odvedou tři argumenty.

  • ncol or nrow: vynutí uspořádání panelů do daného rozvržení, například facet_wrap(~ gear, ncol = 2).
  • váhyVe výchozím nastavení je nastaveno na „fixed“, takže každý panel sdílí jeden rozsah os. Pokud se skupiny výrazně liší velikostí, použijte „free_y“ nebo „free“, ale mějte na paměti, že volná měřítka způsobují, že vizuální srovnání mezi panely bude zavádějící.
  • Labeller: nahrazuje úroveň nezpracovaného faktoru v každém proužku, například labeller = label_both pro výpis „gear: 4“ místo „4“.

Dvě skupinyping proměnné. Pomocí funkce facet_grid() sestavte matici panelů, kde první proměnná probíhá napříč řádky a druhá napříč sloupci:

ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point(aes(color = factor(cyl))) +
    facet_grid(am ~ gear) +
    theme_classic()

Fasety nebo barvy? Barva funguje dobře až do čtyř skupin v grafu s omezeným překrytím. Mimo tento počet, nebo pokud se skupiny silně překrývají, je fazetování čitelnější, protože každý panel obsahuje pouze své vlastní body. Můžete kombinovat obojí: fazetu podle jedné proměnné a barvu podle jiné, jako v příkladu facet_grid() výše.

Jak zvládnout překreslování v bodových grafech R

Při několika desítkách pozorování je viditelný každý bod. Při tisících se značky vrství na sobě a nejhustší oblast se jednoduše čte jako pevná skvrna. To je překreslovánía ggplot2 nabízí čtyři standardní řešení.

1. Snižte neprůhlednost. Nejlevnější oprava. Překrýváníping body přirozeně ztmavnou, takže se stává viditelnou hustota:

ggplot(diamonds, aes(x = carat, y = price)) +
    geom_point(alpha = 0.05) +
    theme_classic()

2. Diskrétní hodnoty jitteru. Když proměnná nabývá pouze několika hodnot, body se nacházejí na stejných souřadnicích. Odděluje je malé náhodné posunutí:

ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
    geom_jitter(width = 0.15, height = 0) +
    theme_classic()

Nastavte výšku = 0, aby se hodnoty y, které nesou skutečné informace, nikdy nezměnily.

3. Vyhoďte letadlo. U velkých datových sad počítejte pozorování na buňku a počet namapujte do barev. Šestiúhelníkové přihrádky se vyhýbají vizuálním artefaktům, které produkují čtvercové přihrádky:

ggplot(diamonds, aes(x = carat, y = price)) +
    geom_hex(bins = 40) +
    theme_classic()

4. Nakreslete kontury hustoty. Vrstevnice vymezují oblasti, kde se pozorování soustředí, a úhledně se vrství přes vybledlé body:

ggplot(diamonds, aes(x = carat, y = price)) +
    geom_point(alpha = 0.05) +
    geom_density_2d(color = "#C42126") +
    theme_classic()

Obecně platí, že alfa zpracovává několik tisíc bodů, hexagonální binning desítky tisíc a vzorkování dat pomocí dplyr::slice_sample() je pragmatickou možností, která nad rámec toho odpovídá.

Bodový graf v R: Code Odkaz

Níže uvedená tabulka uvádí volání ggplot2 pro každou z výše uvedených možností:

Objektivní Code
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(x2)))
Přidejte přizpůsobené hodnoty
ggplot(df, aes(x = x1, y = y)) + geom_point() + stat_smooth(method = "lm")
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()
Faseta podle skupiny
ggplot(df, aes(x = x1, y = y)) + geom_point() + facet_wrap(~ x2)
Zvládání překreslování
ggplot(df, aes(x = x1, y = y)) + geom_point(alpha = 0.3)
Uložit
ggsave("my_fantastic_plot.png")

Nejčastější dotazy

geom_point() vykresluje každé pozorování v jeho přesných souřadnicích. geom_jitter() přidává malé náhodné posunutí, takže body sdílející stejnou hodnotu se stanou rozlišitelnými, což je důležité, když jedna osa obsahuje diskrétní hodnoty.

Uvnitř aes() barva mapuje proměnnou, takže ggplot2 přiřadí jeden odstín na úroveň a vytvoří legendu. Mimo aes() je barva pevná konstanta aplikovaná na každý bod a legenda se nezobrazuje.

Za geom_point() přidejte stat_smooth(method = „lm“) nebo geom_smooth(method = „lm“). Nastavením se = FALSE skryjete pásmo spolehlivosti a použitím method = „loess“ dosáhnete nelineárního vyhlazování.

Bodové grafy odhalují korelaci rysů a odlehlé hodnoty před trénováním a představují standardní způsob zobrazení predikovaných hodnot oproti skutečným nebo vizualizace shluků po redukci dimenzionality pomocí PCA nebo t-SNE.

Ano. Asistenti umělé inteligence mohou vytvářet vrstvy, navrhovat opravy překrytí a vysvětlovat chyby, jako je například chybějící wrapper aes(). Spusťte vygenerovaný kód na vlastních datech, protože názvy sloupců a typy faktorů se snadno mýlí.

Shrňte tento příspěvek takto: