如何将手绘红色圆圈添加到 ggplot2 图中?
Posted
技术标签:
【中文标题】如何将手绘红色圆圈添加到 ggplot2 图中?【英文标题】:How can I add freehand red circles to a ggplot2 graph? 【发布时间】:2015-06-06 11:40:32 【问题描述】:去年我发布了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()
这个情节足够丰富,但它没有灵魂。如何在其中添加手绘的红色圆圈?
【问题讨论】:
我也赞成这个问题,但对同一主题给予两次评分对评分系统来说似乎有点不公平:-) 【参考方案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)
就这样,该情节现在值得发布在 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")
【讨论】:
OT 评论。 (我确实投了赞成票。) ggplot2 软件包缺乏的一件事是为?layer
提供了足够的帮助页面。其他帮助页面中的许多链接都指向该页面,这尤其令人讨厌。您显然了解 ggplot2 层范式。既然你已经把我们弄得眼花缭乱和逗乐了,请问你下一次浪费时间的花费是提交扩展层页面吗?
不要忘记使用set.seed
来制作你的手绘圆圈的形状不可重现:set.seed(sample(0:.Machine$integer.max, size=1))
。 (确保你有足够的内存,或者使用这个低内存替代方案:set.seed(as.integer(runif(1, 0, .Machine$integer.max)))
。)
@RyanThompson 但这行不通!如果用户之前设置了种子,那么sample
操作将成为确定性的并且仍然可以重现! (相反,您可以将其设置为当前时间!)
是的,你完全正确。我试图将尽可能多的错误和滥用挤进愚人节的评论中。例如,第一个种子方法将创建一个包含所有正整数的巨大整数向量,只是为了从中采样一个数字,而浮点解不一定能保证均匀采样。如果该评论的任何部分没有错误,那就是错误。
@BondedDust I dusted off 我的尝试沿着这些思路。不过,我并不十分乐观。以上是关于如何将手绘红色圆圈添加到 ggplot2 图中?的主要内容,如果未能解决你的问题,请参考以下文章