library(tidyverse)
## ── Attaching packages ───────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.0     ✓ purrr   0.3.3
## ✓ tibble  2.1.3     ✓ dplyr   0.8.5
## ✓ tidyr   1.0.2     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ──────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

5.2.1 Ćwiczenia

ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(colour = class)) +
  geom_smooth(se = FALSE, method='lm') +
  labs(
    title = 'Wraz ze wzrostem objętości silnika, spada zasięg mil na galon',
    subtitle = 'Wyjątkiem są pojazdy 2-osobowe',
    x = "Objętość skokowa silnika (l)",
    y = "Gospodarka paliwowa na autostradzie (mpg)",
    colour = "Rodzaj samochodu",
    caption = 'Cezary Pukownik'
  )
## `geom_smooth()` using formula 'y ~ x'

5.3.1 Ćwiczenia

Zadanie 1

label_11 <- tibble(
displ = Inf,
hwy = Inf,
label = "Większy rozmiar silnika \njest związany z gorszą gospodarką paliwową."
)

label_01 <- tibble(
  displ = -Inf,
  hwy = Inf,
  label = "Większy rozmiar silnika \njest związany z gorszą gospodarką paliwową."
)

label_10 <- tibble(
  displ = Inf,
  hwy = -Inf,
  label = "Większy rozmiar silnika \njest związany z gorszą gospodarką paliwową."
)

label_00 <- tibble(
  displ = -Inf,
  hwy = -Inf,
  label = "Większy rozmiar silnika \njest związany z gorszą gospodarką paliwową."
)


ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_text(aes(label = label), 
            data = label_11, 
            vjust = "top", 
            hjust = "right") +
  geom_text(aes(label = label), 
            data = label_01, 
            vjust = "top", 
            hjust = "left") +
  geom_text(aes(label = label), 
            data = label_10, 
            vjust = "bottom", 
            hjust = "right") +
  geom_text(aes(label = label), 
            data = label_00, 
            vjust = "bottom", 
            hjust = "left")

Zadanie 2

?annotate()

można zrobić np w ten sposób, podając bezpośrednio np text, oraz położenie wpisująć ręcznie, bez danych.

p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
p + annotate('label', x = 4, y = 25, label = "Some text")

# Jak etykiety utworzone za pomocą funkcji geom_text() działają z panelami? 
# Jak dodać etykietę do pojedynczego panelu? Jak umieścić różne etykiety na każdym panelu? 
# (Wskazówka: pomyśl o danych, na podstawie których utworzyłeś wykres).

Zadanie 3

mpg %>% 
  group_by(drv) %>% 
  summarise(count=n()) %>% 
  ggplot(aes(x=drv, y=count, label=count)) +
  geom_bar(stat='identity') +
  geom_text(size=10, nudge_y = 5)

mpg %>% 
  group_by(drv, class) %>% 
  summarise(count=n()) %>% 
  ggplot(aes(x=drv, y=count, label=count)) +
  geom_bar(stat='sum') +
  geom_text(size=10, nudge_y = 5) +
  facet_wrap(~class)

na różnych panelach dane automatycznie się dostosowują do wykresu aby pokazać dane np ja jednym panelu można zrobić coś takiego:

mpg %>% 
  group_by(drv, class) %>% 
  summarise(count=n()) %>%
  mutate(label = if_else(class=='compact', as.character(count), '')) %>% 
  ggplot(aes(x=drv, y=count, label=label)) +
  geom_bar(stat='sum') +
  geom_text(size=10, nudge_y = 5) +
  facet_wrap(~class) +
  labs(title='Liczba samochodów klasy compakt ma znacznie więcej\nsamochodów napędzanych na przód niż na 4 koła.',
       x = 'rodzaj napędu',
       y = 'liczba samochodów')

teraz etykiety pokazywane są tylko na panelu gdzie clasa = compact Zadanie 4

label.padding = unit(0.25, “lines”), label.r = unit(0.15, “lines”), label.size = 0.25,
Zadanie 5

# Jakie są cztery argumenty funkcji arrow()? 
# Jak działają? 
# Utwórz zestaw wykresów, który zaprezentuje najważniejsze opcje.

?arrow()
## Help on topic 'arrow' was found in the following packages:
## 
##   Package               Library
##   ggplot2               /home/altarin/R/x86_64-pc-linux-gnu-library/3.6
##   grid                  /usr/lib/R/library
## 
## 
## Using the first match ...

angle
length
ends
type
agnle - opisuje jak szeroni bedzie grot strzałki, im mniejsza wartość tym węższa bedzie strzałka lenght - opisuja jak długi bedzie grot sprzałki ends - jedno z “last”, “first”, “both” - wskazuje które końce lini, bedą zakończone grotem. type - jedno z “open”, “closed” - wskazuje, czy grot będzie otwrty, -> jak strzła, czy zamknięty jak trojkąt -|>

data <- data.frame('a'=c(1,2), 'b'=c(2,3))

ggplot(data, aes(x=a, y=b)) +
  geom_line(arrow=arrow(angle=45, length = unit(5, "cm"), ends='both', type='closed')) +
  annotate('text', x=1.25, y=2.75, label="ładna duża strzałka :)", size=9)

ggplot(data, aes(x=a, y=b)) +
  geom_line(arrow=arrow(angle=25, length = unit(2, "cm"), ends='last', type='open')) +
  annotate('text', x=1.3, y=2.75, label="smukła strzałka w jedną stronę", size=7)

5.4.4 Ćwiczenia

install.packages(‘hexbin’)

df <- tibble(
  x = rnorm(10000),
  y = rnorm(10000)
)

ggplot(df, aes(x, y)) +
  geom_hex() +
  scale_color_gradient(low = "white", high = "red") +
  coord_fixed()

ten kod przysłania domyslną skalę, ale nie tą którą chcemy. Poprawiony kod powinien wyglądać tak. Zmieniono color na fill

ggplot(df, aes(x, y)) +
  geom_hex() +
  scale_fill_gradient(low = "white", high = "red") +
  coord_fixed()

?scale_fill_gradient

# pierwrszy argument to colors.

Zadanie 3

years <- lubridate::make_date(seq(lubridate::year(min(presidential$start)),
                                  lubridate::year(max(presidential$end)),
                                  by = 4), 1, 1)

library(glue)
## 
## Attaching package: 'glue'
## The following object is masked from 'package:dplyr':
## 
##     collapse
presidential %>%
  mutate(id = 33 + row_number()) %>% 
  mutate(x_label = glue('{name} ({id})')) -> x_label

x_label = x_label$x_label
x_label = as.vector(x_label)

presidential %>%
  mutate(id = 33 + row_number()) %>%
  ggplot(aes(start, reorder(x_label, id), colour = party)) +
  geom_point() +
  geom_segment(aes(xend = end, yend = reorder(x_label, id))) +
  scale_colour_manual(values = c(Republican = "red", Democratic = "blue")) +
  scale_x_date(NULL, breaks = years, date_labels = "'%y") +
  scale_y_discrete(breaks = x_label)

Zadanie 4

ggplot(diamonds, aes(carat, price)) +
  geom_point(aes(colour = cut), alpha = 1/20) +
  guides(colour = guide_legend(override.aes = list(alpha = 1, size=4)))