如何为ggplot geom_line密度添加ggrepel文本

时间:2017-05-09 08:08:00

标签: r ggplot2 ggrepel

我有以下代码:

set.seed(10)
foo <- data.frame(
  v2=sample(c(1,2,3),size=10,rep=T),
  v3=as.factor(sample(c('cat','dog'),10,rep=T))
)

library(ggplot2)
library(ggrepel)
ggplot(foo, aes(x=v2, colour=v3, group=v3)) +
  geom_line(aes(group=v3), stat='density', alpha=0.3)

产生这个情节:

enter image description here

我尝试添加此内容:

 geom_text_repel(aes(x=v2, label = v3)) +

但它给出了:

Error: geom_text_repel requires the following missing aesthetics: y

我的问题是如何使用ggrepel显示标签,如上图所示?

1 个答案:

答案 0 :(得分:3)

你可以做到

set.seed(10)
foo <- data.frame(
  v2=sample(c(1,2,3),size=10,rep=T),
  v3=as.factor(sample(c('cat','dog'),10,rep=T))
)
library(ggplot2)
ggplot(foo, aes(x=v2, colour=v3, group=v3)) +
  geom_line(aes(group=v3), stat='density', alpha=0.3) -> p
pdat <- ggplot_build(p)$data[[1]]
idx <- sample(seq_len(nrow(pdat)), 20)
p + ggrepel::geom_text_repel(
  aes(x,y,label=txt), 
  cbind(pdat[idx,], txt=paste0("txt", seq_along(idx))), 
  inherit.aes=F, 
  show.legend = F, 
  color="red", 
  segment.colour = "black", 
  min.segment.length = unit(0, "lines")
)