2017-05-09 46 views
0

我有以下代碼:如何添加ggrepel文本ggplot geom_line密度

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來顯示標籤,如上圖所示?

回答

2

你可以做

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") 
)