去年我发布了an analysis of user activity to Meta Stack Overflow,其中包括一系列ggplot2图表。然而,Wooble通过指出我的阴谋致命的缺陷使我大为羞耻:
手绘红圈are of course necessary in any plot on Meta Stack Overflow,但令我沮丧的是,我找不到将它们添加到ggplot2图表的方法。我知道如何add a circle,但是这样一个人造的构造没有个性,也永远不会通过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()
这个情节足够丰富,但它没有灵魂。如何添加手绘红色圆圈呢?
答案 0 :(得分:54)
您可以使用我的ggfreehand包,该包提供了ggplot2中不小心省略的geom_freehand
图层。
例如,如果您想圈出上图中最活跃的两个月,您可以按照以下代码进行操作:
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)
就这样,情节现在值得发布在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")