将y轴标题放在图表的左上角

Lar*_*off 5 r ggplot2

我在R中绘制了一个带ggplot2的图,我希望y轴的标题出现在图的左上角.请考虑以下代码以获取默认行为:

require(ggplot2)

xy = data.frame(x=1:10, y=10:1)

ggplot(data = xy) +
  geom_point(aes(x = x, y = y)) +
  ylab("very long label")
Run Code Online (Sandbox Code Playgroud)

这将生成以下图表:

原始图表

我想移动并旋转文本"非常长的标签".我可以使用theme()函数做一些事情:

ggplot(data = xy) +
  geom_point(aes(x = x, y = y)) +
  ylab("very long label") +
  theme(axis.title.y = element_text(angle = 0, vjust = 1.1, hjust = 10))
Run Code Online (Sandbox Code Playgroud)

这给了我这个:

修改过的图

您可以看到我的目的地,但边距不正确 - 左边距太大,因为空间是为旋转标签保留的,而上边距对于文本而言太小.

我怎么能告诉ggplot我想在那个位置没有旋转的y轴标题,并为它保留适当的空间?

jor*_*ran 6

把它放在主要情节标题中:

ggplot(data = xy) +
  geom_point(aes(x = x, y = y)) +
  ggtitle("very long label") +
  theme(plot.title = element_text(hjust = 0))
Run Code Online (Sandbox Code Playgroud)

如果你喜欢使用负值hjust,你可以稍微向左推它,但如果你走得太远,标签将被剪裁.在这种情况下,您可以尝试使用plot.margin:

ggplot(data = xy) +
  geom_point(aes(x = x, y = y)) +
  ggtitle("very long label") +
  theme(plot.title = element_text(hjust = -0.3),
        plot.margin = rep(grid::unit(0.75,"in"),4))
Run Code Online (Sandbox Code Playgroud)

很明显,这使得向图表添加实际标题变得很困难.您始终可以使用以下内容手动注释:

grid.text("Actual Title",y = unit(0.95,"npc"))
Run Code Online (Sandbox Code Playgroud)

或者,反之亦然,grid.text用于y标签.