如何将手绘红色圆圈添加到 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 层采用其他选项来自定义圆圈,包括 radiusnoisiness。你也可以让圆圈不变成红色,就好像那是你想做的事情一样。

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 图中?的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化分面图在分面图中的每个直方图中添加均值文本标签添加均值红色竖线

如何将图例添加到 ggplot2 中的多行?

保存手绘图中的数据(不是图像文件)

将文本标签添加到 ggplot2 散点图

R:将 alpha 包添加到 2d 或 3d 散点图中

如何在一个 ggplot2 图中为两个几何图层添加图例?