ZIWAUA0/Rodział 5/Kurs_R- Rozdział 5.R

206 lines
5.6 KiB
R
Raw Normal View History

2020-04-16 20:34:53 +02:00
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)))