Заметки по языку R | Часть 1: Построение нетипичных диаграмм, и подписи данных в ggplot2

от автора

В ноябре 2018 года я запустил телеграм канал R4marketing посвящённый языку R. Публикации канала разделены по рубрикам, одна из таких рубрик — «Заметки по R». В неё входят небольшие заметки, с интересным или полезными советами по использованию языка R, заимствованные из прочитанных статей, подсмотренные в различных чатах или взятые из собственной практики работы в R.

Этой статьёй я начинаю серию публикаций состоящих из подборок наиболее полезных заметок канала R4marketing. Первая статья данной серии посвящена визуализации данных.

Содержание

Если вы интересуетесь анализом данных возможно вам будут полезны мои telegram и youtube каналы. Большая часть контента которых посвящены языку R.

  1. Построение интерактивных воронок.

  2. Построение диаграммы Парето.

  3. Построение круговых диаграмм в ggplot2.

  4. Как добавить ярлыки данных в ggplot2.

  5. Построение диаграммы гантелей.

Построение интерактивных воронок

Воронка — наиболее часто используемый способ визуализации этапов продажи, направленный на выявления проблемных шагов на пути к заключению сделки.

Особого пояснения тут не требуется, ниже приведён пример кода для построения интерактивной воронки на базе пакета highcharter.

library(dplyr) library(highcharter)  # установка темы options(   highcharter.theme = hc_theme_smpl(     tooltip = list(valueDecimals = 2)     )   )  # тестовые данные df <- data.frame(   x = c(0, 1, 2, 3, 4),   y = c(975, 779, 584, 390, 200),   name = c("Leads",           "Sales Call",           "Follow Up",           "Conversion",           "Sale") ) %>%   arrange(-y)  # построение визуализации hc <- df %>%   hchart(     "funnel", hcaes(x = name, y = y),     name = "Sales Conversions"   )  # выводим график в Viewer hc

Пример воронки, полученный с помощью приведённого примера кода:

Интерактивная визуализация воронки продаж
Интерактивная визуализация воронки продаж

Данная заметка заимствованна из статьи «Funnel Chart in R-Interactive Funnel Plot».

Построение диаграммы Парето

Диаграмма Парето является графическим отображением правила Парето. В менеджменте качества применение этого правила показывает, что значительное число несоответствий и дефектов возникает из-за ограниченного числа причин. Коротко правило Парето формулируется как 80 на 20. Например, если применить это правило по отношению к дефектам, то окажется, что 80 процентов дефектов возникает из-за 20 процентов причин.

Более подробно о том как используется диаграмма Парето можно почитать вот тут.

Ниже пример построения диаграммы Парето с помощью пакета qcc.

library(qcc)  # тестовые данные df <- data.frame(   product = c('A', 'B', 'C', 'D', 'E', 'F'),   count = c(40, 57, 50, 82, 17, 16) )  # диаграмма парето pareto.chart(   df$count,   main = 'Pareto Chart',   col = heat.colors(length(df$count)) )

Результат выглядит примерно вот так:

Диаграмма Парето
Диаграмма Парето

Эта заметка родилась из статьи «How to Create Pareto Chart in R».

Построение круговых диаграмм в ggplot2

Несмотря на то, что круговая диаграмма один из самых неудачных способов визуализации данных, она в то же время является одним из наиболее часто используемых типов диаграмм.

Но если вы попробуете поискать geom_pie() среди прочих, доступных в ggplot2 геомов, то ваши поиски не увенчаются успехом. Стандартной отдельной функции под построение круговой диаграммы в ggplot2 нет.

Но, построить круговую диаграмму в ggplot2 тем не менее можно. По умолчанию графики в ggplot2 строятся в декартовой системе координат. Если вы построите нормированную столбчатую диаграмму, и переведёте её из декартовой в полярную систему координат, то получите круговую диаграмму.

Для перевода в полярную систему координат используйте функцию coord_polar().

Ниже пример построения круговой диаграммы:

library(ggplot2)  # генерируем тестовые данные d <- data.frame(   Slices = c("Writing code", "Staring at plot", "Fixing code", "Enjoying plot") |> rep(2),   Time = c(1, 5, 4, 2, 1, 1, 1, 2),   When = c("Before reading this post", "After reading this post") |> rep(each = 4) ) |>   transform(     # Относительные временные диапазоны     Time_relative = Time / ave(Time, When, FUN = sum),     Slices = factor(Slices, levels = unique(Slices)),     When = factor(When, levels = unique(When)) )  # строим круговую диаграмму ggplot(d, aes(x = 1, y = Time_relative, fill = Slices)) +   facet_grid(cols = vars(When)) +    # преобразуем систему координат в полярную   # для построения круговой диаграммы   coord_polar(theta = "y") +   # создаём столбчатую диаграмму с позицией stacked   geom_col(position = position_stack(reverse = TRUE),             color = "tan3", size = 3, show.legend = FALSE) +    # Добавляем описание секторов   geom_text(aes(label = Slices),              position = position_stack(vjust = 0.5, reverse = TRUE)) +    # очищаем тему   theme_void() +    labs(title = "Относительное время, потраченное на построение круговых диаграмм с помощью ggplot2")

График построенный с помощью приведённого выше кода выглядит следующим образом:

Круговая диаграмма построенная с помощью ggplot2
Круговая диаграмма построенная с помощью ggplot2

Код этой заметки был подсмотрен в статье «ggplot: Easy as pie (charts)».

Как добавить ярлыки данных в ggplot2

Добавить на график подписи можно с помощью слоя geom_text(). Аргумент vjust позволяет вам менять положение подписи выше или ниже самого столбца.

В свою очередь geom_text() поддерживает следующие эстетики:

  • label — текст подписей

  • alpha — прозрачность

  • angle — угол наклона

  • colour — цвет текста

  • family — шрифт

  • fontface — тип шрифта, жирный, курсив и т.д.

  • group — группировка

  • hjust — горизонтальное смещение текста относительно визуализации

  • lineheight — межстрочный интервал

  • size — размер шрифта

  • vjust — вертикальное смещение текста относительно визуализации

Пример кода для построения графика с подписями данных:

library(ggplot2)  # счётчик случайных чисел set.seed(123)  # тестовый набор данных data <- data.frame(x = sample(LETTERS[1:6], 300, replace = TRUE))  # Способ 1: используем переменную ..count.. ggplot(data, aes(x = factor(x), fill = factor(x))) +   geom_bar() +   geom_text(     aes(label = ..count..),      stat = "count",      vjust = 1.5,      colour = "white" )  # Способ 2: Предварительная агрегация данных data %>%    dplyr::count(x, name = 'Freq') %>%    ggplot(aes(x = x, y = Freq, fill = x)) +    geom_bar(stat = "identity") +   geom_text(     aes(label = Freq),      vjust = -1,      colour = "gray32",      fontface = 'bold' )

Результат выполнения кода:

Диаграмма с подписями данных
Диаграмма с подписями данных

Код заметки заимствован из статьи «Adding text labels to ggplot2 Bar Chart».

Построение диаграммы гантелей

Рассмотрим ещё одно расширение для ggplot2ggalt.

Диаграммы гантелей (также называются диаграммой ДНК) являются альтернативным вариантом визуализации для показа изменений между двумя точками данных. Диаграмма получила свое название из-за сходства с гантелями, когда они находятся в горизонтальном положении.

Пример построения диаграммы гантелей в R:

library(tidyverse) library(tidyquant) library(ggalt)  # приводим данные к нужному виду mpg_by_year_tbl <- mpg %>%   select(hwy, year, model, class) %>%   pivot_wider(     names_from   = year,     values_from  = hwy,     id_cols      = c(class, model),     values_fn    = function(x) mean(x, na.rm = TRUE),     names_prefix = "year_"   ) %>%   mutate(model = fct_reorder(model, year_2008)) %>%   drop_na()  # строим график mpg_by_year_tbl %>%   ggplot(aes(x = year_1999,               xend = year_2008,               y = model,               group = model)) +      geom_dumbbell(     colour="#a3c4dc",     colour_xend="#0e668b",     size=4.0,     dot_guide=TRUE,     dot_guide_size=0.15,     dot_guide_colour = "grey60"   )

Выглядит диаграмма гантелей построенная с помощью приведённого выше кода так:

В написании данной заметки использовался материал статьи «ggalt: Make a Dumbbell Plot to Visualize Change in ggplot2».

Заключение

Надеюсь вам были полезные приведённые в статье 5 заметок по визуализации данных в R и они найдут отклик в решении ваших задач.

Делитесь в комментариях своими заметками по работе в R, или примерами нетипичных диаграмм которые используете.

Ну и конечно, буду рад видеть вас среди подписчиков канала R4marketing.


ссылка на оригинал статьи https://habr.com/ru/articles/577784/