将ggplot标题定位在绘图的右上方

21

我正在使用在ggplot0.9.3中找到的极好的theme_minimal()主题,它有白色背景。我想把图的标题放在自定义位置,即在右上角。在下面的示例中,我知道xy值,但不知道有没有办法传递xmaxymax值来确保文本放置在右上角。理想情况下,文本应该是右对齐的。

#example plot
p <- qplot(mpg, wt, data = mtcars, colour = cyl)
p +  annotate("text", x = 30, y = 5, label = "Custom Title")

#what I would like
p + annotate("text", y= ymax, x =xmax_or_RightJustified)

事先说一下,我认为没有简单的方法使文本完全贴入角落中。最安全的方法是使用数据中的max(x)和max(y)来帮助你定位它。一个问题是x和y比例尺默认会有4%的扩展填充 - 如果你在绘图调用中改变了它怎么办?你可以使用例如u <- ggplot_build(p)来获得相当于角落坐标系的坐标,提取u$panel$ranges[[1]]$y.range[2]u$panel$ranges[[1]]$x.range[2],但这是一种事后计算,我不认为你想要这样。这是要放在一个主题函数中吗? - Dennis
这个问题的答案在 ggplot2 的文档中。只需执行 ?geom_text -- 它详细解释了定位。不知何故,annotate 没有告诉你它将所有参数传递给 geom_text(或 geom_label),但本质上就是这样。 - Ufos
2个回答

52

你可以做

p + annotate("text",  x=Inf, y = Inf, label = "Some text", vjust=1, hjust=1)

18

你可以在 annotate() 函数中使用 max()min() 函数,然后添加 hjust=1 来确保文本被放置在图内(并且靠右对齐)。

p + annotate("text", y= max(mtcars$wt), x =max(mtcars$mpg),label="Custom Title",hjust=1) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接