将 geom_text/annotate 层添加到 geom_point 层上并叠加在 geom_histogram 上

Add a geom_text/annotate layer to a geom_point layer overlaid on a geom_histogram

我有数据要绘制在 geom_histogram 中,它有几个点我想用 geom_point 叠加在直方图上,然后注释它们(用 geom_textannotate).

这是直方图和点:

#data
library(ggplot2)
set.seed(10)
df <- data.frame(id = LETTERS, val = rnorm(length(LETTERS)))

#points I want to overlay
selected.ids <- sample(LETTERS, 3, replace = F)
cols <- rainbow(length(selected.ids))
selected.df <- data.frame(id=selected.ids, col=cols, stringsAsFactors = F)
selected.df$x <- df$val[which(df$id %in% selected.ids)]
selected.df <- selected.df[order(selected.df$x),]
selected.df$col <- factor(selected.df$col, levels=cols)

#building the histogram
g <- ggplot(df, aes(x = val)) + geom_histogram(bins = 10, colour = "black", alpha = 0, fill = "#FF6666")

#finding the x,y locations of the points:
g.data <- ggplot_build(g)$data[[1]]
g.breaks <- c(g.data$xmin, tail(g.data$xmax, n=1))
selected.df$y <- g.data$count[findInterval(selected.df$x, g.breaks)]

要叠加我使用的点:

g + geom_point(data = selected.df, aes(x = x, y = y, colour = factor(col)), size = 2) + 
  theme(legend.position="none")

给出:

现在尝试添加带有 geom_text 的文本:

g + geom_point(data = selected.df, aes(x = x, y = y, colour = factor(col)), size = 2) + 
  annotate("text",size=2,x=selected.df$x,y=selected.df$y,label=selected.df$id)+
  theme(legend.position="none")

引发此错误:

Error in unique.default(x, nmax = nmax) : 
  unique() applies only to vectors

annotate:

g + geom_point(data = selected.df, aes(x = x, y = y, colour = factor(col)), size = 2) + 
  annotate("text",size=2,x=selected.df$x,y=selected.df$y,label=selected.df$id)+
  theme(legend.position="none")

没有添加文字。

有什么想法吗?

我认为你正在尝试做的是这样的。 geom_text 应该与所选数据的 geom_point 相同。

g + geom_point(data = selected.df, aes(x = x, y = y, colour = factor(col)), size = 2) + 
geom_text(data=selected.df, aes(x=x, y=y, label=id))+
theme(legend.position="none")