Как я могу добавить красные круги вручную в график 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]()
Этот сюжет достаточно информативен, но у него нет души. Как я могу добавить к нему свободные красные круги?
Ответы
Ответ 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]()