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)))