# Data Visualization

#### Branko Arsić

#### 05.03.2021.

Official book: http://www.cookbook-r.com/Graphs/
ggplot ekstenzije: https://exts.ggplot2.tidyverse.org/gallery/

If you’d like to learn more about the theoretical underpinnings of ggplot2 before you start, I’d recommend reading “The Layered Grammar of Graphics”, http://vita.had.co.nz/papers/layered-grammar.pdf.

## All layered grammar of graphics

ggplot(data = <DATA>) +
<GEOM_FUNCTION>( mapping = aes(<MAPPINGS>), stat = <STAT>, position = <POSITION>) +
<COORDINATE_FUNCTION> +
<FACET_FUNCTION>

## Script setup

    # install.packages("tidyverse", repos = "http://cran.us.r-project.org")
    # https://www.tidyverse.org/packages/ -- zvanični sajt paketa
    library(tidyverse)

    ## -- Attaching packages ---------------------------------------------------------------------------------------------- tidyverse 1.3.0 --

    ## v ggplot2 3.3.3     v purrr   0.3.3
    ## v tibble  3.0.6     v dplyr   1.0.4
    ## v tidyr   1.0.2     v stringr 1.4.0
    ## v readr   1.3.1     v forcats 0.4.0

    ## Warning: package 'ggplot2' was built under R version 3.6.3

    ## Warning: package 'tibble' was built under R version 3.6.3

    ## Warning: package 'tidyr' was built under R version 3.6.2

    ## Warning: package 'readr' was built under R version 3.6.1

    ## Warning: package 'purrr' was built under R version 3.6.1

    ## Warning: package 'dplyr' was built under R version 3.6.3

    ## Warning: package 'forcats' was built under R version 3.6.1

    ## -- Conflicts ------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
    ## x dplyr::filter() masks stats::filter()
    ## x dplyr::lag()    masks stats::lag()

## mpg dataset from ggplot2

    head(mpg)

    ## # A tibble: 6 x 11
    ##   manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class
    ##   <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>
    ## 1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compa~
    ## 2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compa~
    ## 3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compa~
    ## 4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compa~
    ## 5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compa~
    ## 6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compa~

    summary(mpg)

    ##  manufacturer          model               displ            year
    ##  Length:234         Length:234         Min.   :1.600   Min.   :1999
    ##  Class :character   Class :character   1st Qu.:2.400   1st Qu.:1999
    ##  Mode  :character   Mode  :character   Median :3.300   Median :2004
    ##                                        Mean   :3.472   Mean   :2004
    ##                                        3rd Qu.:4.600   3rd Qu.:2008
    ##                                        Max.   :7.000   Max.   :2008
    ##       cyl           trans               drv                 cty
    ##  Min.   :4.000   Length:234         Length:234         Min.   : 9.00
    ##  1st Qu.:4.000   Class :character   Class :character   1st Qu.:14.00
    ##  Median :6.000   Mode  :character   Mode  :character   Median :17.00
    ##  Mean   :5.889                                         Mean   :16.86
    ##  3rd Qu.:8.000                                         3rd Qu.:19.00
    ##  Max.   :8.000                                         Max.   :35.00
    ##       hwy             fl               class
    ##  Min.   :12.00   Length:234         Length:234
    ##  1st Qu.:18.00   Class :character   Class :character
    ##  Median :24.00   Mode  :character   Mode  :character
    ##  Mean   :23.44
    ##  3rd Qu.:27.00
    ##  Max.   :44.00

## Including Plots

“The greatest value of a picture is when it forces us to notice what we never expected to see.” — John Tukey

ggplot(data = ) + (mapping = aes())

Osnovni grafik i prikaz po klasama:

    ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))

    ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class))

    ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, size = class))

    ## Warning: Using size for a discrete variable is not advised.

    ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, alpha = class))

    ## Warning: Using alpha for a discrete variable is not advised.

    ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, shape = class))

    ## Warning: The shape palette can deal with a maximum of 6 discrete values because
    ## more than 6 becomes difficult to discriminate; you have 7. Consider
    ## specifying shapes manually if you must have them.

    ## Warning: Removed 62 rows containing missing values (geom_point).

    knitr::include_graphics("shapes.png")

Oblici za tacke

    mpg$class = factor(mpg$class)
    ggplot(data=mpg) + geom_point(mapping = aes(x=displ, y=hwy, shape=class)) + scale_shape_manual(values=1:nlevels(mpg$class))

Bojenje:

    ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

## Facets

    ggplot(data = mpg) +
      geom_point(mapping = aes(x = displ, y = hwy)) +
      facet_wrap(~ class, nrow = 2)

Kombinacija dve promenljive:

    ggplot(data = mpg) +
      geom_point(mapping = aes(x = displ, y = hwy)) +
      facet_grid(drv ~ cyl)

## Geometric objects

    ggplot(data = mpg) +
      geom_smooth(mapping = aes(x = displ, y = hwy))

    ## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

    # Umesto linetype mogli smo da koristimo
    # 1. group = drv
    # 2. color = drv

    ggplot(data = mpg) +
      geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv), show.legend = FALSE)

    ## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

### multiple geoms in the same plot

    ggplot(data = mpg) +
      geom_point(mapping = aes(x = displ, y = hwy)) +
      geom_smooth(mapping = aes(x = displ, y = hwy))

    ## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

    # Kraći zapis:

    ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
      geom_point() +
      geom_smooth()

    ## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

    ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
      geom_point(mapping = aes(color = class)) +
      geom_smooth()

    ## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

    # Filtriranje podataka:

    ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
      geom_point(mapping = aes(color = class)) +
      geom_smooth(data = filter(mpg, class == "subcompact"), se = FALSE)

    ## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

### Domaći

    knitr::include_graphics("task1.png")

## Statistical transformations; diamond dataset

    ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut))

    # Ne radi bez group = 1
    ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))

## Position adjustments

    ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, colour = cut))

    ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = cut))

    # stekovanje

    ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity))

    # position adjustment: position = "identity", "dodge" or "fill".
    # position = "identity" will place each object exactly where it falls in the context of the graph. This is not very useful for bars, because it overlaps them.

    ggplot(data = diamonds, mapping = aes(x = cut, fill = clarity)) +
      geom_bar(alpha = 1/5, position = "identity")

    ggplot(data = diamonds, mapping = aes(x = cut, colour = clarity)) +
      geom_bar(fill = NA, position = "identity")

    ggplot(data = diamonds) +
      geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")

    # scatter plot again

    # shows only 126 points of 234. This problem is known as overplotting.
    ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))

    ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy), position = "jitter")

    # Check geom_jitter()

## Coordinate systems

    ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot()

    ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot() + coord_flip()