Урок 12 Пакет ggplot2: Построение графиков слой за слоем в ggplot2

12.1 Описание

В этом уроке мы продолжаем изучать пакет ggplot2, предназначенный для построения графиков на языке R.

Данное видео поможет вам разобраться в грамматике построения графики, которая лежит в основе ggplot2.

Мы разберёмся с основными слоями и эстетиками пакета, и научимся изменять график накладывая на него новые слои.

12.2 Видео

12.3 Материалы

Все материалы к данному уроку можно найти по ссылке.

12.4 Код

library(ggplot2)
library(dplyr)
library(readr)
library(forcats)

# чтение данных
data <- read_tsv('https://raw.githubusercontent.com/selesnow/r4excel_users/master/lesson_12/sales.csv')

# структура данных
data
str(data)

# продажи по месяцам, столбчатая диаграмма
data %>%
  mutate(month = format(date, "%Y-%m")) %>%
  group_by(month) %>%
  summarise(transactions = n_distinct(id)) %>%
  ggplot( aes(x = month, y = transactions) ) +  # основной слой
    geom_col( aes( fill = transactions ),       # слой столбцатой диаграммы
              show.legend = FALSE) +
    labs(title = "Количество продаж за 2019 год", # заголовок
         subtitle = "по месяцам")  +              # подзаголовок
    xlab("Месяц") +                               # подпись X
    ylab("Количество продаж") +                   # подпись y
  scale_fill_gradient2(low = "red",             # цвет заливки, минимального значения
                       mid = "gray",            #               средние значения
                       midpoint = 81.5,         #               что считать средним значением
                       high = "limegreen")      #               максимальные значения

# Динамика продаж по менеджерам
# задаём все настройки через главный слой
data %>%
  mutate(month = format(date, "%Y-%m")) %>%
  group_by(month, manager_id) %>%
  summarise(sales_sum = sum(summ)) %>%
  ggplot( aes(x = month, 
              y = sales_sum, 
              group = manager_id,
              colour = manager_id) ) + 
    geom_line( size = 0.1 ) +
    geom_point( size = 1  ) 

# переносим настройки в отдельные слои
data %>%
  mutate(month = format(date, "%Y-%m")) %>%
  group_by(month, manager_id) %>%
  summarise(sales_sum = sum(summ)) %>%
  ggplot( aes(x = month, 
              y = sales_sum) ) + 
  geom_line( aes(group = manager_id, 
                 colour = manager_id) ) +
  geom_point( aes(group = manager_id, 
                  colour = manager_id) ) 

# разбиваем на графики
data %>%
  group_by( id, shop ) %>%
  summarise( count = sum(count) ) %>%
  ggplot( aes(x = count) ) +
    geom_histogram(fill = "cyan3", color = "cyan4") +
    facet_grid( ~shop )

# переворачиваем график
data %>%
  group_by(id, manager_id) %>%
  summarise(transaction_summ = sum(summ)) %>%
  group_by(manager_id) %>%
  summarise(avg_summ = mean(transaction_summ)) %>%
  ggplot( aes(x = fct_reorder(.f = manager_id,
                              .x = avg_summ, 
                              .fun = median), 
              y = avg_summ) ) +
    geom_bar(aes(fill = avg_summ), 
             show.legend = FALSE,
             stat = "identity") +
    coord_flip() + # переворачиваем график
    scale_fill_gradient(low = "coral1", high = "limegreen") +
    xlab("Менеджер") +
    ylab("Средний чек") +
    labs(title = "Средний чек за 2019 год", # заголовок
         subtitle = "по менеджерам")

12.5 Тест