206 lines
5.6 KiB
R
206 lines
5.6 KiB
R
library(tidyverse)
|
|
|
|
#' # 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'
|
|
)
|
|
|
|
|
|
#' # 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()
|
|
|
|
#' 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)
|
|
|
|
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)))
|