2015-04-01 2 views
47

В прошлом году я опубликовал an analysis of user activity to Meta Stack Overflow, включая серию графиков ggplot2. Тем не менее, Wooble сильно опозорил меня, указывая на фатальную ошибку с моими участками:Как я могу добавить красные круги вручную на график ggplot2?

enter image description here

Freehand красных кругами are of course necessary in any plot on Meta Stack Overflow, но, к моему ужасу, я не мог найти способ, чтобы добавить их к ggplot2 графику. Я знаю, как add a circle, но такая искусственная конструкция не имеет индивидуальности и никогда не пройдет на Мета.

В воспроизводимым примере рассмотрит этот участок моей автоответчика деятельности в течение долгого времени, созданный с использованием 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

Я upvote вопрос, как хорошо, но это, кажется, немного несправедливо по отношению к рейтинговой системе, чтобы дать очки дважды за ту же тему :-) –

ответ

52

Вы можете использовать мой пакет 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

+9

OT комментарий. (Я сделал upvote.) Одна из вещей, недостающих в пакете ggplot2, - это адекватная страница справки для '? Layer'. Особенно раздражает то, что так много ссылок в других справочных страницах указывают на эту страницу. Вы, очевидно, понимаете парадигму уровня ggplot2. Теперь, когда вы ослепили и удивили нас, могу ли я попросить, чтобы ваша следующая трата времени впустую была отправкой страницы расширенного слоя? –

+0

Не забудьте использовать 'set.seed', чтобы сделать фигуры ваших свободных рук * непригодными *:' set.seed (sample (0: .Machine $ integer.max, size = 1)) '. (Убедитесь, что у вас достаточно памяти, или используйте эту альтернативу с низкой памятью: 'set.seed (as.integer (runif (1, 0, .Machine $ integer.max))).) –

+0

@ RyanThompson, но это выиграло Не работай! Если пользователь задает семя раньше, эта операция 'sample' становится детерминированной, и она все еще воспроизводима! (Вместо этого вы можете установить его на текущее время!) –

Смежные вопросы