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