这可以使用以下方法完成annotation_custom()
。我正在绘制这个答案 https://stackoverflow.com/a/12417481/4303162.
困难在于ggplot
剪辑放置在绘图区域之外的注释,这正是您想要做的。但剪辑可以关闭。
annotation_custom()
使用 grobs,因此您首先需要创建它们:
library(grid)
text_high <- textGrob("Highest\nvalue", gp=gpar(fontsize=13, fontface="bold"))
text_low <- textGrob("Lowest\nvalue", gp=gpar(fontsize=13, fontface="bold"))
接下来,设置绘图并存储它:
p <-
df1 %>% ggplot(aes(x , y )) + geom_bar(stat = "identity") +
scale_y_continuous(labels = percent) +
theme(plot.margin = unit(c(1,1,2,1), "lines")) +
annotation_custom(text_high,xmin=1,xmax=1,ymin=-0.07,ymax=-0.07) +
annotation_custom(text_low,xmin=5,xmax=5,ymin=-0.07,ymax=-0.07)
第三行确保绘图下方有足够的空间放置标签,最后两行添加注释。该位置以两个坐标的最小值和最大值给出。该对象将位于由这些坐标定义的区域的中心。在目前的情况下,通过将最小值和最大值设置为相同来简单地定义点似乎是最简单的。
最后一步是关闭剪切,以便绘图区域之外的对象(即注释)也被绘制。对于 ggplot2 3.0.0 及更高版本,可以使用以下命令完成coord_cartesian()
(参见tfad334 的回答 https://stackoverflow.com/a/53531754/4303162):
p + coord_cartesian(clip = "off")
对于旧版本的 ggplot2,过程稍微复杂一些:
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)
最后一行绘制了情节。