Linkki kotitehtävän lähdekoodiin gitlab:ssa
Tilastografiikat tekemisessä on tärkeää tietää perusasiat eri grafiikkaformaateista. Grafiikkaformaattien kaksi päälinjaa ovat bittikarttagrafiikka ja vektorigrafiikka, joiden ominaisuudet tiivistetty ao. taulukkoon. Lue myös yo. lyhyet wikipedia-artikkelit mikäli ero ei ole aivan selvä.
bittikartta (bitmap) | vektori | |
---|---|---|
tiedostopääte | .jpg, .png, .gif | .eps, .pdf, .svg, .ai |
esimerkiksi | digikuva | googlen kartat |
koostuu | miljoonista pikseleistä | pisteistä, viivoista ja polygoneista |
tiedostokoko | suuri | pieni |
muokkausohjelmisto | Gimp (Photoshop) | Inkscape (Illustrator) |
sopii | verkoon, printtiin (korkearesoluutioisena) | printtiin, jälkikäsittelyyn, -svg-muodossa myös verkkoon |
Vektorigrafiikasta voi tehdä bittimappigrafiikkaa, mutta ei toisin päin
R:ssä tehtyjä kuvia voit tallentaa useisiin erilaisiin sekä vektori- että bittikarttaformaattiehin.
Bittikartta- ja vektorigrafiikka ovat ensisijaisesti ns. staattista grafiikka, jossa ei ole vuorovaikutteisia ominaisuuksia. “Tuktkimusviestinnässä” perinteisen printattavan tutkimusraportin ohella yleistyy erilaiset verkkototeutukset kuten blogit tai verkkosovellukset. Kun sisältö on palvelimella ja lukeminen tapahtuu selaimella, niin kaikenlaiset verkkoteknologiat ovat käytettävissä. Verkkototeutusten kaksi päälinjaa, vuorovaikutteinen grafiikka & verkkosovellukset, on vedetty yhteen alla olevaan taulukkoon.
grafiikan tyyppi | pros | cons |
---|---|---|
interaktiiviset kuviot | teknologian kehitys nopeaa | lyhyt elinkaari päivittyvien riippuvuuksien myötä |
paljon vaihtoehtoja | hyvin sekava skene | |
tarvitsee verkkoyhteydet | ||
ei voi printata! | ||
verkkosovellukset | hyvin joustavia | hostaus ja ylläpito |
pystyy kaikkeen mihin R & linux | vaatii paljon räätälöintia |
R:ssä näiden kanssa pääset alkuun seuraavista linkeistä:
Rstudiossa voit valita Plots-paneelista Export ja tallentaa kuvan Save as image dialogista kuuteen eri formaattiin:
sekä pdf-formaattiin kohdasta “Save as PDF”.
pdf-formaatti on nykyisellään parhaiten yhteensopiva vektorigrafiikan muoto. Suurin haaste on eri fonttien käyttö
ggplot2-paketilla tehtyjä kuvia voi tallentaa Rstudio-käyttöliittymästä käsin samoin kuin kaikkia muitakin formaatteja. Tallentaminen on kuitenkin näppärämpää kirjoittaa kuvion koodin yhteyteen ´ggsave()-funktiota käyttäen. ´ggsave()
-funktio ymmärtää kuvion nimestä, mihin formaattiin kuva tallennetaan. Jos teet kuvion alla olevalla koodilla
kuva <- ggplot(data=cars, aes(x=speed,y=dist)) + geom_point()
Voit tallentaa sen eri formaatteihin koodilla
ggsave(plot=kuva, filename = "kuva.png")
- bittimappi pngggsave(plot=kuva, filename = "kuva.pdf")
- vektori pdfggsave(plot=kuva, filename = "kuva.svg")
- vektori svgLisäparametreinä ´ggsave()`-funktioon voi laittaa mm. seuraavat
filename
File name to create on disk.plot
Plot to save, defaults to last plot displayed.device
Device to use (function or any of the recognized extensions, e.g. “pdf”). By default, extracted from filename extension. ggsave currently recognises eps/ps, tex (pictex), pdf, jpeg, tiff, png, bmp, svg and wmf (windows only).path
Path to save plot to (combined with filename).scale
Multiplicative scaling factor.width
, height
Plot dimensions, defaults to size of current graphics device.units
Units for width and height when specified explicitly (in, cm, or mm)dpi
Resolution used for raster outputs.Mikäli et ole vielä luonut kansiota _kotitehtava4/kuviot
luo se komennolla dir.create(path="./_kotitehtava4/kuviot", recursive=TRUE, showWarnings = FALSE)
Piirrä kuvat koodilla kuva <- ggplot(data=cars, aes(x=speed,y=dist)) + geom_point()` ja kirjoita miten se tallennetaan ko. kansioon png, svg, tiff, jpg, eps, pdf ja bmp muodoissa.
Avaan kaikki kuvat koneellasi ja tarkastele niitä!
kuva <- ggplot(data=cars, aes(x=speed,y=dist)) + geom_point()
ggsave(plot=kuva, filename = "kuva.png", path="./_kotitehtava4/kuviot")
## Saving 7 x 5 in image
ggsave(plot=kuva, filename = "kuva.svg", path="./_kotitehtava4/kuviot")
## Saving 7 x 5 in image
ggsave(plot=kuva, filename = "kuva.tiff", path="./_kotitehtava4/kuviot")
## Saving 7 x 5 in image
ggsave(plot=kuva, filename = "kuva.jpg", path="./_kotitehtava4/kuviot")
## Saving 7 x 5 in image
ggsave(plot=kuva, filename = "kuva.eps", path="./_kotitehtava4/kuviot")
## Saving 7 x 5 in image
ggsave(plot=kuva, filename = "kuva.pdf", path="./_kotitehtava4/kuviot")
## Saving 7 x 5 in image
ggsave(plot=kuva, filename = "kuva.bmp", path="./_kotitehtava4/kuviot")
## Saving 7 x 5 in image
Jatketaan malesdatan kanssa jonka voit siis ladata komennolla malesdata <- readRDS(gzcon(url("http://courses.markuskainu.fi/utur2016/database/malesdata.RDS")))
Tee datan muuttujasta wage
sekä histogrammi, tiheyskuvio (density plot) sekä laatikkojanakuvio ja tallenna ne .pdf-muotoon koossa leveys = 6, korkeus= 5, yo. nimillä _kotitehtava4/kuviot
-kansioon
malesdata <- readRDS(gzcon(url("http://courses.markuskainu.fi/utur2016/database/malesdata.RDS")))
p <- ggplot(malesdata, aes(wage)) + geom_histogram()
p
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggsave(plot = p, filename = "./_kotitehtava4/kuviot/histogrammi.pdf", width = 6, height=5)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p <- ggplot(malesdata, aes(wage)) + geom_density()
p
ggsave(plot = p, filename = "./_kotitehtava4/kuviot/tiheyskuvio.pdf", width = 6, height=5)
p <- ggplot(malesdata, aes(x=1, y=wage)) + geom_boxplot()
p
ggsave(plot = p, filename = "./_kotitehtava4/kuviot/laatikkojanakuvio.pdf", width = 6, height=5)
Katso geom_histogram() dokumentaatiota ja etsi sieltä kuva, jossa on ns. pinottu histogrammi. Siis pylväissä on päällekkäin eri luokittelevan muuttujan tapaukset.
Tee vastaava histogrammi wage muuttujasta niin että ethn-muuttujan luokat ovat palkkeina
ggplot(malesdata, aes(wage, fill = ethn)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Piirakkakuvio on datavisualisointien klassikko, joka eroaa aikasemmista juuri koordinaattijärjestelmän osalta. Grammar of graphics -ajattelussa piirakkakuvio on päällekkäin pinottu (stacked) histogrammi, jossa on polaarinen koordinaattijärjestelmä.
Tutustu coord_polar()-dokumentaatioon: http://docs.ggplot2.org/current/coord_polar.html ja tee malesdata:sta piirakkakuvio, jossa väreinä on ethn-muuttujan luokat.
pie <- ggplot(malesdata, aes(x = factor(1), fill = factor(ethn))) +
geom_bar(width = 1)
pie + coord_polar(theta = "y")
Tee malesdata-muuttujasta yhteenvetotaulukko dplyr::summarise-funktiolla objektiksi
dat, jossa on eri etnh-muuttujan luokkien mediaanipalkat. Tee
dat`-datan ethn-muuttujasta faktori ja ja järjestä luokat käänteiseen aakkosjärjestykseen, ja piirra siitä tolppakuvio, jossa x-akselilla ethn-muuttuja ja y-akselilla mediaanipalkka.
malesdata %>%
group_by(ethn) %>%
summarise(mdn = median(wage)) -> dat
ggplot(dat, aes(x=ethn,y=mdn)) + geom_bar(stat="identity") + labs(title="ennen järjestämistä")
dat$ethn <- factor(dat$ethn) # oletuksena menee aakkosjärjestykseen
dat$ethn <- forcats::fct_rev(dat$ethn)
ggplot(dat, aes(x=ethn,y=mdn)) + geom_bar(stat="identity") + labs(title="järjestämisen jälkeen")
Tutustu forcats-paketin dokumentaatioon: http://forcats.tidyverse.org/ ja tee vastaava yhteenvetotaulukko malesdatasta industry-muuttujan suhteen.
Järjestä yhteenvetotaulukon teollisuudenala-muuttujan luokat keskipalkan mukaan faktorin leveleiksi (fct_reorder()
) ja pirrä vastaava tolppakuvio kuin edellä.
malesdata %>%
group_by(industry) %>%
summarise(mdn = median(wage)) -> dat
ggplot(dat, aes(x=industry,y=mdn)) + geom_bar(stat="identity") + labs(title="ennen järjestämistä")
dat$industry <- forcats::fct_reorder(dat$industry, dat$mdn)
ggplot(dat, aes(x=industry,y=mdn)) + geom_bar(stat="identity") + labs(title="järjestämisen jälkeen")
Alla oleva koodi on mukaelma yhdestä kuviosta jonka tein professori Niemelän viime viikkoiseen kommenttipuheenvuoroon.
Alkuperäiset kuvat: http://koti.kapsi.fi/~muuankarski/fpa/elinolot2016/johdanto_kuvat.html
library(tidyverse)
library(eurostat)
library(countrycode)
# köyhyysvaje
# search_eurostat("poverty gap")
d <- get_eurostat(id = "ilc_li11", time_format = "raw")
# lab <- label_eurostat(d)
d %>% filter(sex %in% "T",
age %in% "TOTAL",
indic_il %in% "LI_GAP_MD60") %>%
select(geo,time,values) -> df.gap.l
# Köyhyysaste
#search_eurostat("poverty rate")
d <- get_eurostat(id = "ilc_li02", time_format = "raw")
# lab <- label_eurostat(d)
d %>% filter(sex %in% "T",
age %in% "TOTAL",
unit %in% "PC_POP",
indic_il %in% "LI_R_MD70") %>%
select(geo,time,values) -> df.rate.l
df.gap.l %>%
left_join(df.rate.l, by = c("geo","time")) -> df.scatter
df.scatter <- merge(df.gap.l,df.rate.l,by=c("geo","time"))
names(df.scatter) <- c("geo.time","year","gap","rate")
#
point_palette <- c("#999999", "#E69F00", "#56B4E9", "#009E73","#D55E00", "#CC79A7","#0072B2","#F0E442")
df.scatter$geo.time <- as.character(df.scatter$geo.time)
df.scatter$geo.time[df.scatter$geo.time == "UK"] <- "GB"
df.scatter$maa <- countrycode(df.scatter$geo.time, "iso2c", "country.name")
# regimes
is(df.scatter$maa)
df.scatter$regime[df.scatter$maa %in% c("Austria", "Belgium", "Switzerland", "Germany", "France", "Luxembourg", "Netherlands")] <- "Western Central Europe"
df.scatter$regime[df.scatter$maa %in% c("Bulgaria", "Czech Republic", "Estonia", "Hungary", "Lithuania", "Latvia", "Poland", "Romania", "Slovenia", "Slovak Republic", "Croatia","Slovakia")] <- "Eastern Europe"
df.scatter$regime[df.scatter$maa %in% c("Cyprus", "Greece", "Spain", "Italy", "Malta", "Portugal")] <- "Southern Europe"
df.scatter$regime[df.scatter$maa %in% c("Denmark", "Finland", "Iceland", "Norway", "Sweden")] <- "Nordic Countries"
df.scatter$regime[df.scatter$maa %in% c("Ireland", "United Kingdom","Australia","United States","Canada","New Zealand")] <- "Anglo-Saxon Countries"
df.scatter$regime[df.scatter$maa %in% c("Japan", "Korea, Republic of","Korea")] <- "East Asian"
df.scatter$regime[!(df.scatter$regime %in% c("Western Central Europe",
"Eastern Europe",
"Southern Europe",
"Nordic Countries",
"Anglo-Saxon Countries",
"East Asian"))] <- NA
scatterplot <- ggplot(data=df.scatter %>% filter(year == 2014) %>%
na.omit(),
aes(x=rate,y=gap)) +
geom_point(aes(color=regime), size=3) +
geom_label(aes(fill=regime,label=maa),
color="white",size=4, nudge_y=-0.5, nudge_x=-0.2, show.legend = F) +
labs(y="Poverty gap (%)", x="Poverty rate (%)") +
# coord_cartesian(xlim=c(5,25),ylim=c(12,35)) +
scale_color_manual(values=point_palette) +
scale_fill_manual(values=point_palette) +
theme_light() +
theme(legend.title=element_blank()) +
theme(legend.text=element_text(size=12)) +
theme(legend.position="top") +
theme(text=element_text(family="Open Sans")) +
#geom_smooth(method=lm, se=FALSE) +
theme(axis.title.y = element_text(size=12, face="bold")) +
theme(axis.title.x = element_text(size=12, face="bold")) +
theme(axis.text.y = element_text(size=10)) +
theme(axis.text.x = element_text(size=10)) +
guides(color = guide_legend(nrow = 1)) +
theme(legend.key.size = unit(6, "mm")) +
labs(title="At-risk-of-poverty rate and relative at risk of poverty gap in Europe in 2014")
scatterplot
Tee vastaava kuvio jostain sinua kiinnostavasta Eurostatin muuttujaparista, muokkaa maaryhmittelyä ja värejä. Asenna ensin tarvittavat paketit, mikäli ne puuttuvat! Tallenna se nimellä _kotitehtava4/kuviot/
-kansioon .pdf-muodossa koossa joka näyttää pdf-lukijassa hyvältä
plot(cars)
Tein demon karttojen tekemisestä osaksi kirjoittamani eurostat
-paketin avulla tönne: https://rpubs.com/muuankarski/210495.
Tutustu myös viralliseen vignetteen: https://github.com/rOpenGov/eurostat/blob/master/vignettes/eurostat_tutorial.md ja blogipostaukseen: http://ropengov.github.io/r/2015/05/01/eurostat-package-examples/.
Tee itseäsi kiinnostavasta indikaattorista vastaava kartta ja tallenna se nimellä _kotitehtava4/kuviot/
-kansioon .pdf-muodossa koossa joka näyttää pdf-lukijassa hyvältä
plot(cars)
2016 Markus Kainu.
Tämä teos on lisensoitu Creative Commons Nimeä 4.0 Kansainvälinen -lisenssillä.
Tämä sivusto on tehty R:ssä Rmarkdown-paketin uusimmassa kehitysversion uudella render_site()`
-funktiolla, jonka tekee staattisten responsiivisten verkkosivujen tekemisen helpoksi. Katso ohjeet: