Подтвердить что ты не робот

Как я могу добавить красные круги вручную в график ggplot2?

В прошлом году я опубликовал анализ активности пользователей в Meta Stack Overflow, включая серию графиков ggplot2. Тем не менее, Wooble сильно пристыдил меня, указав на фатальную ошибку с моими графиками:

enter image description here

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

В качестве воспроизводимого примера рассмотрим этот график моей собственной ответной активности с течением времени, созданный с помощью пакета stackr:

# devtools::install_github("dgrtwo/stackr")
library(ggplot2)
library(dplyr)
library(lubridate)
library(stackr)

answers <- stack_users(712603, "answers", num_pages = 10, pagesize = 100)
answers_per_month <- answers %>%
    mutate(month = round_date(creation_date, "month")) %>%
    count(month)

ggplot(answers_per_month, aes(month, n)) + geom_line()

without freehand

Этот сюжет достаточно информативен, но у него нет души. Как я могу добавить к нему свободные красные круги?

4b9b3361

Ответ 1

Вы можете использовать мой пакет ggfreehand, который предоставляет слой geom_freehand, который был так небрежно опущен из ggplot2.

Например, если вы хотите обвести два верхних наиболее активных месяца в приведенном выше графике, вы можете выполнить код:

top_2_months <- answers_per_month %>% top_n(2)

library(ggfreehand)
ggplot(answers_per_month, aes(month, n)) + geom_line() +
    geom_freehand(data = top_2_months)

with freehand

И точно так же, сюжет теперь заслуживает того, чтобы его публиковали в Meta Stack Overflow.

Уровень geom_freehand содержит дополнительные параметры для настройки круга, включая radius и noisiness. Вы также можете сделать круг не красным, как будто это то, что вы когда-либо хотели бы сделать.

p <- ggplot(answers_per_month, aes(month, n)) + geom_line()

p + geom_freehand(data = top_2, radius = .5)
p + geom_freehand(data = top_2, noisiness = 10)
p + geom_freehand(data = top_2, noisiness = 1)
p + geom_freehand(data = top_2, color = "blue")

enter image description here