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()
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'
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")
?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)
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.
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)
ggplot(diamonds, aes(carat, price)) +
geom_point(aes(colour = cut), alpha = 1/20) +
guides(colour = guide_legend(override.aes = list(alpha = 1, size=4)))