使用for循环将注释放在ggplot2中一系列直方图的顶部

Bra*_*den 5 for-loop r ggplot2

我正在创建一些直方图,我想在图的顶部添加注释.我正在使用for循环绘制这些,所以我需要一种方法将注释放在顶部,即使我的ylims从图形更改为图形.如果我可以在循环中存储每个图形的ylim,我可能会导致我的注释的y坐标根据当前图形而变化.我的注释中包含的y值必须在循环进行迭代时动态更改.下面是一些示例代码来演示我的问题(请注意注释如何移动.我需要根据每个图形的ylim进行更改):

library(ggplot2)

cuts <- levels(as.factor(diamonds$cut))

pdf(file = "Annotation Example.pdf", width = 11, height = 8,
    family = "Helvetica", bg = "white")

for (i in 1:length(cuts)) {
  by.cut<-subset(diamonds, diamonds$cut == cuts[[i]])
  print(ggplot(by.cut, aes(price)) +
    geom_histogram(fill = "steelblue", alpha = .55) +
  annotate ("text", label = "My annotation goes at the top", x = 10000 ,hjust = 0, y = 220, color = "darkred"))
}    
dev.off()
Run Code Online (Sandbox Code Playgroud)

Bri*_*ggs 9

ggplotInf在不改变绘图范围的情况下,使用其位置来表示绘图范围的极值.因此y可以将注释的值设置为Inf,并且vjust还可以调整参数以获得更好的对齐.

...
print(ggplot(by.cut, aes(price)) +
      geom_histogram(fill = "steelblue", alpha = .55) +
      annotate("text", label = "My annotation goes at the top", 
               x = 10000, hjust = 0, y = Inf, vjust = 2, color = "darkred"))
...
Run Code Online (Sandbox Code Playgroud)

对于i<-2,这看起来像:

在此输入图像描述