aitech-wizualizacja/02.ipynb

4.1 MiB
Raw Permalink Blame History

Logo 1

Wizualizacja danych

3-6. Biblioteka ggplot2 [laboratoria]

Tomasz Górecki (2021)

Logo 2

library(repr) # To resize plots in Jupyter
options(repr.plot.width = 16, repr.plot.height = 9)
library(ggplot2)
library(grid) # For multiplots
library(gridExtra) # For multiplots
library(ggthemes) # Additinal themes
library(PogromcyDanych) # Library with data sets
setLang(lang = 'eng') # Change language to English for data sets from PogromcyDanych
Ładowanie wymaganego pakietu: dplyr


Dołączanie pakietu: dplyr


Następujący obiekt został zakryty z package:gridExtra:

    combine


Następujące obiekty zostały zakryte z package:stats:

    filter, lag


Następujące obiekty zostały zakryte z package:base:

    intersect, setdiff, setequal, union


Ładowanie wymaganego pakietu: SmarterPoland

Ładowanie wymaganego pakietu: httr

Ładowanie wymaganego pakietu: htmltools

Biblioteka ggplot2

Pakiet _ggplot2 jest jednym z najbardziej zaawansowanych narzędzi do tworzenia wykresów statystycznych. Oznacza to, że konstrukcja pakietu jest na tyle elastyczna, że można z nim wykonać praktycznie każdą grafikę statystyczną.

Karty pomocy

Przykłady

Wykres punktowy

ggplot(cats_birds, aes(x = weight, y = speed)) +
  geom_point() # Basic ggplot
ggplot(cats_birds, aes(x = weight, y = speed, shape = group)) + 
  geom_point(size = 5) # With different shapes
ggplot(cats_birds, aes(x = weight, y = speed, size = group)) + 
  geom_point() # With different sizes
Warning message:
“Using size for a discrete variable is not advised.”
ggplot(cats_birds, aes(x = weight, y = speed, color = group)) + 
  geom_point(size = 5) # With different colors
ggplot(cats_birds, aes(x = weight, y = speed, shape = group, color = habitat)) + 
  geom_point(size = 5) # Combined different shapes and colors

Dodawanie tekstu do wykresu

ggplot(cats_birds, aes(x = weight, y = speed, label = species)) + 
  geom_text(hjust = 0) + 
  xlim(0, 350) # With text
ggplot(cats_birds, aes(x = weight, y = speed, label = species, color = group)) + 
  geom_text(hjust = -0.1) + 
  geom_point() + 
  xlim(0, 350) # Two geometries
ggplot(cats_birds, aes(x = weight, y = speed, label = species)) + 
  geom_text(hjust = -0.1, aes(color = group)) + 
  geom_point() + 
  xlim(0, 350) # Local aesthetic

Wykres liniowy i wykres typu "wstążka"

head(WIG)
A data.frame: 6 × 8
DateNameOpening PriceMax PriceMin PriceClosing PriceChangeTurnover
<date><fct><dbl><dbl><dbl><dbl><dbl><dbl>
12013-12-02WIG54627547905393553935-1.41 640784
22013-12-03WIG54026540265325053277-1.22 914148
32013-12-04WIG53222532855253652867-0.77 968047
42013-12-05WIG52837529005257552597-0.51 808039
52013-12-06WIG52838528995251352728 0.251012872
62013-12-09WIG53113531875288152881 0.29 599884
ggplot(WIG, aes(x = Date, y = `Closing Price`)) + 
  geom_line() # Line geometry
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
ggplot(WIG, aes(x = Date, 
                ymin = 52000, 
                ymax = `Closing Price`)) + 
  geom_ribbon() # Ribbon geometry
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”
Warning message in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <c5>”
Warning message in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
“niepowodzenie konwersji 'paź 2014' w 'mbcsToSbcs': kropka zastąpiona <ba>”

Dodawanie trendu do wykresu

auta2012 %>% 
  filter(Brand == 'Skoda', Model == 'Octavia') %>% 
  select(Brand, Model, Year, Price.in.PLN, Type.of.fuel) -> data.skods # Preapre data
head(data.skods)
A data.frame: 6 × 5
BrandModelYearPrice.in.PLNType.of.fuel
<fct><fct><dbl><dbl><fct>
1SkodaOctavia201052750benzyna
2SkodaOctavia200316800olej napedowy (diesel)
3SkodaOctavia200738900olej napedowy (diesel)
4SkodaOctavia200939999olej napedowy (diesel)
5SkodaOctavia200828500olej napedowy (diesel)
6SkodaOctavia200836800olej napedowy (diesel)
ggplot(data.skods, aes(x = Year, y = Price.in.PLN)) + 
  geom_point() # Too many points
ggplot(data.skods, aes(x = Year, y = Price.in.PLN)) + 
  geom_smooth() # Smoothed regression line + standard error
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

ggplot(data.skods, aes(x = Year, y = Price.in.PLN)) + 
  geom_smooth(se = FALSE)
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

ggplot(data.skods, aes(x = Year, y = Price.in.PLN)) + 
  geom_point() + 
  geom_smooth(se = FALSE)
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

ggplot(data.skods, aes(x = Year, y = Price.in.PLN)) + 
  geom_point(size = 0.5) + 
  geom_smooth(se = FALSE, size = 3) # Layers are independent
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

ggplot(data.skods, aes(x = Year, y = Price.in.PLN)) + 
  geom_point(size = 0.5) +
  geom_smooth(se = FALSE, size = 2) + 
  geom_smooth(method = 'lm', size = 2, color = 'green') + 
  geom_smooth(method = 'lm', formula = y ~ poly(x, 2), size = 2, color = 'red')
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

`geom_smooth()` using formula 'y ~ x'

Wykres pudełkowy

auta2012 %>% 
  filter(Brand == 'Skoda', Year == 2007) %>% 
  select(Brand, Model, Year, Price.in.PLN, Type.of.fuel) -> data.skods # Prepare data set
head(data.skods)
A data.frame: 6 × 5
BrandModelYearPrice.in.PLNType.of.fuel
<fct><fct><dbl><dbl><fct>
1SkodaFabia 200721850olej napedowy (diesel)
2SkodaOctavia200738900olej napedowy (diesel)
3SkodaOctavia200732500olej napedowy (diesel)
4SkodaOctavia200732500benzyna
5SkodaSuperb 200736600olej napedowy (diesel)
6SkodaFabia 200714500olej napedowy (diesel)
ggplot(data.skods, aes(x = Model, y = Price.in.PLN)) + 
  geom_boxplot()
data.skods$Model <- reorder(data.skods$Model, data.skods$Price.in.PLN, median)
ggplot(data.skods, aes(x = Model, y = Price.in.PLN)) + 
  geom_boxplot() # Sorted
ggplot(data.skods, aes(x = Model, y = Price.in.PLN)) + 
  geom_boxplot(aes(fill = Model)) + 
  guides(fill = FALSE) # Remove legend for fill
Warning message:
“`guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.”

Histogram

ggplot(data.skods, aes(x = Price.in.PLN)) + 
  geom_histogram()
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(data.skods, aes(x = Price.in.PLN, fill = Model)) + 
  geom_histogram(color = 'white')
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Wykres słupkowy

ggplot(data.skods , aes(x = Model)) + 
  geom_bar()
ggplot(data.skods , aes(x = Model, fill = Type.of.fuel)) + 
  geom_bar()

ggplot2 - modyfikacje

ggplot(cats_birds, aes(x = weight, y = speed, shape = group)) + 
  geom_point(size = 5) # How to adjust this plot?
ggplot(cats_birds, aes(x = weight, y = speed, shape = group)) + 
  geom_point(size = 5) +
  ggtitle('Cats vs birds') + 
  theme(plot.title = element_text(size = 20)) + # Title
  xlab('Weight [kg]') + ylab('Speed [km/h]') + # Axis' labels
  scale_shape_discrete(name = 'Cats and birds') + 
  theme(legend.position = 'top') + # Title and position of legend
  geom_text(data = cats_birds[c(6, 8), ], 
            aes(label = species), hjust = -0.2) # Additional text
ggplot(cats_birds, aes(x = weight, y = speed, shape = group, color = group)) + 
  geom_point(size = 5) # Control mapping
ggplot(cats_birds, aes(x = weight, y = speed, shape = group, color = group)) + 
  geom_point(size = 5) + 
  scale_shape_manual(values = c('B', 'C'), 
                     breaks = c('Bird', 'Cat')) + # Shape of groups and labels on legend
  scale_color_manual(values = c('blue', 'red'), 
                     breaks = c('Bird', 'Cat')) + # Colors
  scale_y_continuous(limits = c(0, 200), 
                     expand = c(0, 0)) # Remove margins for X axis
ggplot(cats_birds, aes(x = weight, y = speed, size = length, color = lifespan)) + 
  geom_point() # Control mapping - continuous variable
ggplot(cats_birds, aes(x = weight, y = speed, size = length, color = lifespan)) + 
  geom_point() + 
  scale_size_continuous(range = c(2, 7), limits = c(0, 3)) + # Size and range of points
  scale_color_gradient(low = 'gold', high = 'red') # Colors

ggplot2 - legenda

ggplot(cats_birds, aes(x = weight, y = speed, shape = group)) +
  geom_point(size = 5) 
ggplot(cats_birds, aes(x = weight, y = speed, shape = group)) +
  geom_point(size = 5) + 
  scale_shape_manual(values = c('B', 'C'), 
                     labels = c('Angry birds', 'Big cats'), 
                     name = 'Animals') + 
  theme(legend.background = element_rect(color = 'red', fill = 'grey95'),
        legend.title = element_text(size = 15),
        legend.position = c(0.8, 0.8)) # Position, color of legend

ggplot2 - multiplots

figure <- ggplot(cats_birds, aes(x = weight, y = speed)) +
  geom_point(size = 5) # We have now object figure, we don't plot
print(figure) # Plot
# 1 solution
print(figure + ggtitle('Figure 1'), 
      vp = viewport(x = 0.25, y = 0.75, width = 0.5, height = 0.5))
print(figure + ggtitle('Figure 2'), 
      vp = viewport(x = 0.25, y = 0.25, width = 0.5, height = 0.5))
print(figure + ggtitle('Figure 3'), 
      vp = viewport(x = 0.75, y = 0.5, width = 0.5, height = 1))
# 2 solution
pushViewport(viewport(layout = grid.layout(2, 2))) # Create layout
print(figure + ggtitle('Figure 1'), 
      vp = viewport(layout.pos.row = 1, layout.pos.col = 1)) # Position 1x1
print(figure + ggtitle('Figure 2'), 
      vp = viewport(layout.pos.row = 2, layout.pos.col = 1)) # Position 2x1
print(figure + ggtitle('Figure 3'), 
      vp = viewport(layout.pos.row = 1:2, layout.pos.col = 2)) # Position (1:2)x2
# 3 solution - simplest but not so flexible and we need additional library
grid.arrange(figure + ggtitle('Figure 1'), 
             figure + ggtitle('Figure 2'), 
             figure + ggtitle('Figure 3'),
             ncol = 2)

ggplot2 - szablony

figure <- ggplot(cats_birds, aes(x = weight, y = speed, color = group)) +
  geom_point(size = 5)
figure + theme_bw() # White background and grey lines
figure + theme_excel_new() # Excel
figure + theme_minimal() # Simple
figure + theme_economist() # Economist (newspapper)

Zadania

Zbiory danych dla zadań 1-8 znajdują się w pakiecie _PogromcyDanych (wersja angielska).

  1. Dla zbioru danych _cats_birds przedstaw zależność pomiędzy zmiennymi length oraz speed na wykresie rozrzutu. Dodaj trend liniowy do wykresu. Obie grupy zwierząt powinny mieć własną prostą regresji oraz typ i kolor punktów.

  2. W zbiorze danych _pearson mamy informacje o wzroście ojców i synów. Przedstaw zależność pomiędzy tymi cechami na wykresie rozrzutu. Dodaj trend liniowy bez przedziału ufności.

  3. W zbiorze danych _seriesIMDB mamy informacje o odcinkach około 200 seriali. Stwórz wykres, w którym na osi Y będzie nazwa serialu, a na osi X wykres pudełkowy ocen odcinków danego serialu. Popraw wykres tak, aby seriale były posortowane według median ocen.

  4. W zbiorze danych _diagnosis mamy zmienną eduk4_2013 z poziomami edukacji i zmienną gp29 z odpowiedziami na pytanie co jest najważniejsze w życiu. Stwórz wykres słupkowy. Każdy słupek odpowiada jednemu poziomowi edukacji. Każdy słupek powinien być podzielony na części wypełnione różnymi kolorami w zależności od zmiennej gp29.

  5. Ze zbioru _auta2012 wybierz jedynie auta Volkswagen Passat. Użyj funkcji geom_smooth(), aby przedstawić zależność pomiędzy rokiem produkcji i ceną. Spróbuj zastosować różne szablony wykresu.

  6. Zmień poniższy wykres:

    ggplot(cats_birds, aes(x = weight, y = speed, size = lifespan, color = lifespan)) + geom_point()

    Zastąp skalę kolorów na gradient od koloru zielonego do czerwonego i zastąp kropki kwadratami. Dodaj tytuł i etykiety osi.

  7. Ze zbioru danych _auta2012 wybierz wszystkie samochody marki Toyota. Na wykresie kołowym zwizualizuj liczbę pięciu najpopularniejszych modeli. Następnie te same dane przedstaw na wykresie słupkowym w kolejności malejących liczebności. Nie zapomnij o legendzie.

  8. Dla wzrostu synów i ojców ze zbioru danych _pearson narysuj na jednym wykresie histogram wraz z nieparametryczną oceną gęstości dla każdej cechy. Linie pomiędzy słupkami histogramu pokoloruj na biało. Oba wykresy powinny być obok siebie na jednym diagramie.

  9. Dla zbioru danych _iris przygotuj obrazek jak na poniższym rysunku. Rozważ użycie funkcji geom_density2d() oraz theme_light().

  1. Dla zbioru danych _iris przygotuj obrazek jak na poniższym rysunku.
  1. Dla zbioru danych _mtcars przygotuj obrazek jak na poniższym rysunku.
  1. Dla zbioru danych _economics z pakietu ggplot2 przygotuj obrazek jak na poniższym rysunku. Wykorzystaj szablon theme_economist_white() z pakietu ggthemes.