‘Prázdny’ graf
plot.new()
plot.window(xlim = c(0, 10),ylim = c(-2, 4), xaxs = "i")
box()
axis(1, col.axis = "grey30")
axis(2, col.axis = "grey30",las = 1)
title(main = "nazov grafu",col.main = "green4",sub = "popis",col.sub = "green4",xlab = "os x", ylab = "os y",col.lab = "blue", font.lab = 3)
box("figure", col = "grey90")
Line graph
x = 1995:2005
y = c(81.1, 83.1, 84.3, 85.2, 85.4, 86.5,88.3, 88.6, 90.8, 91.1, 91.3)
plot.new()
plot.window(xlim = range(x),ylim = range(y))
lines(x, y, lwd = 2, type="l",col="yellow") #type:l,s,S,h,p,b,o
title(main = "Vynosy za obdobie 1995-2005",
xlab = "rok",
ylab = "vynos")
axis(1)
axis(2)
box()
Lineárna regresia
x = rnorm(500)
y = x + rnorm(500)
plot.new()
plot.window(xlim = c(-4.5, 4.5), xaxs = "i",ylim = c(-4.5, 4.5), yaxs = "i")
z = lm(y ~ x)
abline(h = -4:4, v = -4:4, col = "lightgrey")
abline(a = coef(z)[1], b = coef(z)[2])
points(x, y)
axis(1)
axis(2, las = 1)
box()
title(main = "Regresna priamka")
title(sub = "(500 pozorovani)")
Grafy funkcií
g <- function(t) { return (t^2+1)^0.5 }
x <- seq(0,5,length=10000)
y <- g(x)
plot(x,y,type="l")
curve((x^2+1)^0.5,0,5)
curve((x^2+2)^0.5,0,5,add=TRUE,col="blue")
f <- function(x) return((x^2+1)^0.5)
plot(f,0,5)
library(lattice)
a <- 1:10
b <- 1:15
eg <- expand.grid(x=a,y=b)
eg$z <- eg$x^2 + eg$x * eg$y
wireframe(z ~ x+y, eg)
wireframe(z ~ x+y, eg,shade = TRUE)
Pomocou balíka rgl
X <- Y <- seq(-2, 0, length.out= 20)
Z <- outer(X,Y,
function(X,Y) 2/exp((X-.5)^2+Y^2)-2/exp((X+.5)^2+Y^2))
cc <- colorRamp(rev(rainbow(10)))
Zsc <- (Z-min(Z))/diff(range(Z))
rgbvec2col <- function(x) do.call(rgb,c(as.list(x),list(max=255)))
colvec <- apply(cc(Zsc),1,rgbvec2col)
library(rgl)
surface3d(X,Y,Z,col=colvec)
bbox3d(color=c("white","black"))
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.1.1
Použijeme dáta z the National Morbidity and Mortality Air Pollution Study (NMMAPS), z ktorých vyberieme údaje za Chicago v rokoch 1997-2000.
nmmaps <- read.csv("http://www.iam.fmph.uniba.sk/ospm/Filova/chicago-nmmaps.csv", as.is=TRUE)
nmmaps$date <- as.Date(nmmaps$date)
nmmaps <- nmmaps[nmmaps$date>as.Date("1996-12-31"), ]
nmmaps$year <- substring(nmmaps$date, 1, 4)
head(nmmaps)
## city date death temp dewpoint pm10 o3 time season year
## 3654 chic 1997-01-01 137 36.0 37.50 13.052268 5.659256 3654 winter 1997
## 3655 chic 1997-01-02 123 45.0 47.25 41.948600 5.525417 3655 winter 1997
## 3656 chic 1997-01-03 127 40.0 38.00 27.041751 6.288548 3656 winter 1997
## 3657 chic 1997-01-04 146 51.5 45.50 25.072573 7.537758 3657 winter 1997
## 3658 chic 1997-01-05 102 27.0 11.25 15.343121 20.760798 3658 winter 1997
## 3659 chic 1997-01-06 127 17.0 5.75 9.364655 14.940874 3659 winter 1997
Na vytvorenie základného grafu v ggplot potrebujeme špecifikovať
dáta, ktoré používame
ktoré premenné chceme vykresliť (aes)
ako ich chceme vykresliť (geom)
Výsledný graf môžeme uložiť ako objekt v R Workspace a následne ho modifikovať:
g <- ggplot(nmmaps, aes(date, temp)) + geom_point(color="firebrick")
g
Názov pridáme pomocou príkazu ggtitle. Vidíme ale, že font aj umiestnenie nám celkom nevyhovuje, preto môžeme parametre názvu modifikovať pomocou príkazu theme, v ktorom špecifikujeme, že chceme zmeniť plot.title.
g <- g + ggtitle('Teplota')
g + theme(plot.title = element_text(size=20, face="bold", margin = margin(10, 0, 10, 0)))
Názvy osí zmeníme pomocou labs
g <- g + labs(x="Date", y=expression(paste("Teplota ( ", degree ~ F, " )")),
title="Teplota")
Zmeniť veľkosť popisiek môžeme opäť pomocou theme:
g + theme(axis.text.x=element_text(angle=50, size=20, vjust=0.5))
Ohraničenie pre os y
g + ylim(c(0,60))
## Warning: Removed 550 rows containing missing values (geom_point).
Farebné odlíšenie vzhľadom na ročné obdobie dosiahneme tak, že do aes, kde zadávame, čo chceme vykresliť, pridáme argument color, ktorý bude mať hodnotu podľa ročného obdobia, ktoré špecifikujeme ako faktorovú premennú. Ďalej pridáme vedľa grafu legendu pomocou príkazu guides:
g <- ggplot(nmmaps, aes(date, temp, color=factor(season))) +
geom_point()
g + guides(colour = guide_legend(override.aes = list(size=4)))
Podobne ako geom_point vykresľuje body, pomocou geom_line môžeme vykresliť spojnice dátových bodov:
ggplot(nmmaps, aes(x=date, y=o3)) + geom_line(color="grey") +
geom_point(color="red")
Parameter theme môžeme použiť napríklad aj na zmenu pozadia grafu:
ggplot(nmmaps, aes(date, temp)) + geom_point(color="firebrick") +
theme(panel.background = element_rect(fill = 'grey75'))
Viac grafov spolu do jedného obrázku vykreslíme pomocou facet_wrap:
ggplot(nmmaps, aes(date,temp)) + geom_point(color="aquamarine4") +
facet_wrap(~year, nrow=1)
ggplot(nmmaps, aes(date,temp)) + geom_point(color="chartreuse4") +
facet_wrap(~year, ncol=2)
Pomocou stat_smooth pridáme krivku vyhladzujúcu dáta:
ggplot(nmmaps, aes(date, temp))+geom_point(color="firebrick")+
stat_smooth()
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Na vykreslenie boxplotu si najskôr do objektu g uložíme, že budeme pracovať s premennými season (ročné obdobie) a o3 (ozón). Samotný boxplot potom vygenerujeme jednoducho pomocou geom_boxplot:
g <- ggplot(nmmaps, aes(x=season, y=o3))
g + geom_boxplot(fill="blue")
g + geom_jitter(alpha=0.5, aes(color=season),position = position_jitter(width = .2))
g + geom_violin(alpha=0.5, color="red")
Všimnime si, ako jednoducho vieme otočiť graf o 90 stupňov:
g + geom_violin(alpha=0.5, color="red") + coord_flip()
Pomocou už spomínaného príkazu stat_smooth vieme do grafu pridať priamku lineárnej regresie:
ggplot(nmmaps, aes(temp, death)) + geom_point(color="blue") +
stat_smooth(method="lm", se=TRUE, color="green")
## `geom_smooth()` using formula 'y ~ x'
Na rýchle vykreslenie dát podobným spôsobom ako plot
môžeme použiť príkaz qplot:
library(babynames)
## Warning: package 'babynames' was built under R version 4.1.3
data(babynames)
michelle <- subset(babynames, name == "Michelle")
qplot(x = year, y = prop, data = michelle, geom = 'line')
qplot(x = year, y = prop, data = michelle, geom = 'line', group = sex, col=sex)
Vykreslíme krivky popularity pre 10 najpopulárnejších chlapčenských mien v roku 1880:
mena1880 <- subset(babynames, year == 1880 & sex =='M')
top1880 <- head(mena1880$name, n=10)
top1880w <- subset(babynames, name %in%top1880 & sex == 'M')
g <- ggplot(data=top1880w, aes(x=year,y=prop)) + geom_line(aes(color=name))
plot(g)
Prehľad príkazov možno nájsť na [https://www.rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf]
Podrobná referenčná príručka je na [https://ggplot2.tidyverse.org/reference/]
Sprievodca vhodnými spôsobmi vizualizácie dát: https://www.data-to-viz.com/