【问题标题】:How can I add freehand red circles to a ggplot2 graph?如何将手绘红色圆圈添加到 ggplot2 图中?
【发布时间】: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()

这个情节足够丰富,但它没有灵魂。如何在其中添加手绘的红色圆圈?

【问题讨论】:

  • 我也赞成这个问题,但对同一主题给予两次评分对评分系统来说似乎有点不公平:-)

标签: r ggplot2


【解决方案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 我的尝试沿着这些思路。不过,我并不十分乐观。
猜你喜欢
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2021-07-14
  • 1970-01-01
相关资源
最近更新 更多