Scatter Plot R-ben a ggplot2 használatával (példával)

A grafikonok az adatelemzési folyamat harmadik részét képezik. Az első rész kb adatkitermelés, a második rész foglalkozik az adatok tisztítása és kezelése. Végre az adattudósnak szüksége lehet rá eredményeit grafikusan közölje.

Az adattudós munkakörét a következő képen tekinthetjük át

  • Az adattudós első feladata egy kutatási kérdés meghatározása. Ez a kutatási kérdés a projekt célkitűzéseitől és céljaitól függ.
  • Ezt követően az egyik legkiemelkedőbb feladat a funkciótervezés. Az adattudósnak össze kell gyűjtenie, kezelnie és meg kell tisztítania az adatokat
  • Ha ez a lépés befejeződött, megkezdheti az adatkészlet feltárását. Néha egy új felfedezés miatt szükséges az eredeti hipotézis finomítása és megváltoztatása.

Szórványrajz R-ben

  • Amikor a magyarázó Az elemzés elérése érdekében az adattudósnak figyelembe kell vennie az olvasó képességét megérteni a mögöttes fogalmakat és modelleket.
  • Eredményeit minden érdekelt fél számára érthető formában kell bemutatni. Az egyik legjobb módszer arra, kommunikálni az eredményeket a grafikon.
  • A grafikonok hihetetlen eszközök az összetett elemzés egyszerűsítésére.

ggplot2 csomag

Az oktatóanyag ezen része arra összpontosít, hogyan lehet grafikonokat/diagramokat készíteni az R segítségével.

Ebben az oktatóanyagban a ggplot2 csomagot fogod használni. Ez a csomag a Wilkinson, 2005-ben írt Grammar of graphics című könyv következetes alapjaira épül. A ggplot2 nagyon rugalmas, számos témát és cselekményspecifikációt tartalmaz magas absztrakciós szinten. A ggplot2-vel nem lehet 3 dimenziós grafikát ábrázolni és interaktív grafikákat létrehozni.

A ggplot2-ben egy gráf a következő argumentumokból áll:

  • Az információk szétdarabolódása
  • esztétikai térképezés
  • geometriai objektum
  • statisztikai transzformációk
  • Mérleg
  • koordináta-rendszer
  • helyzetbeállítások
  • faceting

Az oktatóanyagból megtudhatja, hogyan szabályozhatja ezeket az érveket.

A ggplot2 alapvető szintaxisa a következő:

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

Szórványdiagram

Nézzük meg, hogyan működik a ggplot az mtcars adatkészlettel. Kezdje az mpg változó és a drat változó szórásdiagramjának ábrázolásával.

Alapvető szórásdiagram

library(ggplot2)
ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point()

Kód Magyarázat

  • Először átadja az mtcars adatkészletet a ggplotnak.
  • Az aes() argumentumon belül hozzáadja az x tengelyt és az y tengelyt.
  • A + jel azt jelenti, hogy azt szeretné, hogy R továbbra is olvassa a kódot. Feltörésével olvashatóbbá teszi a kódot.
  • Használja a geom_point()-ot a geometriai objektumhoz.

output:

Alapvető szórásdiagram

Szórványrajz csoportokkal

Néha érdekes lehet az értékeket adatcsoportok (azaz faktor szintű adatok) alapján megkülönböztetni.

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

Kód Magyarázat

  • A geom_point()-ban lévő aes() szabályozza a csoport színét. A csoportnak faktorváltozónak kell lennie. Így a változó sebességfokozatot tényezővé alakítja át.
  • Összességében az aes(color = factor(gear)) kódja van, amely megváltoztatja a pontok színét.

output:

Scatter Plot with Groups

Tengely módosítása

Az adatok átméretezése az adatkutató munkájának nagy részét képezi. Ritka esetekben az adatok szép harang alakúak. Az egyik megoldás arra, hogy adatait kevésbé érzékennyé tegye a kiugró értékekkel szemben, ha átméretezi őket.

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

Kód Magyarázat

  • Az x és y változókat a log()-ban közvetlenül az aes() leképezésen belül alakítja át.

Vegye figyelembe, hogy bármilyen más transzformáció is alkalmazható, például szabványosítás vagy normalizálás.

output:

Tengely módosítása

Szórásdiagram illesztett értékekkel

A grafikonhoz további információszintet is hozzáadhat. Megadhatja a lineáris regresszió illesztett értékét.

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

Kód Magyarázat

  • graph: A grafikonját a változó gráfban tárolja. Hasznos a további használathoz, vagy elkerülheti a túl bonyolult kódsorokat
  • A stat_smooth() argumentum vezérli a simítási metódust
  • módszer = “lm”: Lineáris regresszió
  • col = “#C42126”: A vonal piros színének kódja
  • se = FALSE: Ne jelenítse meg a standard hibát
  • méret = 1: a vonal mérete 1

output:

Szórványdiagram illesztett értékekkel

Vegye figyelembe, hogy más simítási módszerek is rendelkezésre állnak

  • glm
  • gam
  • lösz: alapértelmezett érték
  • abroncs

Adjon hozzá információkat a grafikonhoz

Eddig nem adtunk hozzá információkat a grafikonokhoz. A grafikonoknak tájékoztató jellegűnek kell lenniük. Az olvasónak látnia kell az adatelemzés mögött meghúzódó történetet, pusztán a grafikonra nézve, anélkül, hogy további dokumentációra hivatkozna. Ezért a grafikonokhoz jó címkékre van szükség. Labs()függvénnyel címkéket adhat hozzá.

A lab() alapvető szintaxisa a következő:

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

Cím hozzáadása

Az egyik kötelező információ nyilvánvalóan a cím.

my_graph +
    labs(
        title = "Plot Mile per hours and drat, in log"
         )

Kód Magyarázat

  • my_graph: Ön a tárolt grafikont használja. Ez elkerüli az összes kód újraírását minden alkalommal, amikor új információt ad a grafikonhoz.
  • A címet becsomagolod a lab()-ba.
  • A vonal piros színének kódja
  • se = FALSE: Ne jelenítse meg a standard hibát
  • méret = 1: a vonal mérete 1

output:

Cím hozzáadása

Adjon hozzá egy címet dinamikus névvel

A dinamikus cím segít pontosabb információkat adni a címben.

A paste() függvény segítségével statikus és dinamikus szöveget nyomtathat. A paste() alapvető szintaxisa a következő:

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élda:

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"

Hozzáadhat egy dinamikus nevet a grafikonunkhoz, mégpedig az mpg átlagát.

mean_mpg <- mean(mtcars$mpg)
my_graph + labs(
    title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg)
)

Kód Magyarázat

  • Az mpg átlagát a mean_mpg változóban tárolt mean(mtcars$mpg) értékkel hozza létre
  • Használja a paste()-t az mean_mpg-vel egy dinamikus cím létrehozásához, amely az mpg átlagos értékét adja vissza

output:

Adjon hozzá egy címet dinamikus névvel

Felirat hozzáadása

Két további részlet még egyértelműbbé teheti a grafikont. A feliratról és a feliratról beszélsz. Az alcím közvetlenül a cím alatt található. A felirat tájékoztathat arról, hogy ki végezte a számítást és az adatok forrását.

my_graph +
    labs(
        title =
        "Relation between Mile per hours and drat",
        subtitle =
        "Relationship break down by gear class",
        caption = "Authors own computation"
    )

Kód Magyarázat

  • A laborban() hozzáadtad:
    • title = „Az óránkénti mérföld és a drat közötti kapcsolat”: Cím hozzáadása
    • subtitle = „Kapcsolat bontása felszerelési osztályok szerint”: Felirat hozzáadása
    • caption = „A szerzők saját számításai: Felirat hozzáadása
    • Minden új információt vesszővel választ el,
  • Vegye figyelembe, hogy megtöri a kód sorait. Nem kötelező, és csak a kód könnyebb olvasását segíti elő

output:

Felirat hozzáadása

Nevezze át az x-tengelyt és az y-tengelyt

Előfordulhat, hogy maguk az adatkészletben lévő változók nem mindig explicitek, vagy általában a _-t használják, ha több szó van (pl. GDP_CAP). Nem szeretné, hogy ez a név megjelenjen a grafikonon. Fontos a név megváltoztatása vagy további részletek, például az egységek hozzáadása.

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

Kód Magyarázat

  • A laborban() hozzáadtad:
    • x = „Drat definition”: Az x tengely nevének módosítása
    • y = „Mérföld óránként”: Módosítsa az y-tengely nevét

output:

Nevezze át az x-tengelyt és az y-tengelyt

Irányítsd a mérleget

Szabályozhatja a tengely léptékét.

A seq() függvény akkor hasznos, ha számsorozatot kell létrehoznia. Az alap szintaxis a következő:

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`	

Például, ha egy 0 és 12 közötti tartományt szeretne létrehozni 3-as lépéssel, akkor négy számot kap, 0 4 8 12

seq(0, 12,4)

output:

## [1]  0  4  8 12

Az alábbiak szerint szabályozhatja az x és y tengely léptékét

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

Kód Magyarázat

  • A scale_y_continuous() függvény vezérli a Y-tengely
  • A scale_x_continuous() függvény vezérli a x-tengely.
  • A breaks paraméter szabályozza a tengely felosztását. Manuálisan hozzáadhatja a számsort, vagy használhatja a seq() függvényt:
    • seq(1, 3.6, by = 0.2): Hozzon létre hat számot 2.4 és 3.4 között 3-as lépéssel
    • seq(1, 1.6, by = 0.1): Hozzon létre hét számot 1-től 1.6-ig 1-es lépéssel

output:

Irányítsd a mérleget

téma

Végül az R lehetővé teszi a cselekmény testreszabását különböző témákkal. A ggplot2 könyvtár nyolc témát tartalmaz:

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

output:

téma

Mentse a telkeket

Mindezen lépések után ideje elmenteni és megosztani a diagramot. Közvetlenül a grafikon ábrázolása után hozzáadja a ggsave('A FÁJL NEVE) parancsot, és a rendszer a merevlemezen tárolja.

A grafikon a munkakönyvtárba kerül mentésre. A munkakönyvtár ellenőrzéséhez futtassa ezt a kódot:

directory <-getwd()
directory

Ábrázoljuk fantasztikus grafikonját, elmentjük és ellenőrizzük a helyét

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:

Mentse a telkeket

ggsave("my_fantastic_plot.png")

output:

## Saving 5 x 4 in image

Megjegyzések: Kizárólag pedagógiai célból létrehoztunk egy open_folder() nevű függvényt, amely megnyitja Önnek a könyvtármappát. Csak le kell futtatnia az alábbi kódot, és meg kell néznie, hol van a kép tárolva. Látnia kell egy my_fantastic_plot.png nevű fájlt.

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

Összegzésként

Az alábbi táblázatban összefoglalhatja a szórásdiagram létrehozásához szükséges érveket:

Objektív Kód
Alapvető szórásdiagram
ggplot(df, aes(x = x1, y = y)) + geom_point()
Szórásdiagram színcsoporttal
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
Illesztett értékek hozzáadása
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
Adj címet
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
Felirat hozzáadása
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
Nevezze át x-et
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
Nevezze át y-t
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
Irányítsd a mérleget
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)
Hozzon létre naplókat
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point()
téma
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic()
Megtakarítás
ggsave("my_fantastic_plot.png")