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

R 将y轴标题放在图表的左上角,r,ggplot2,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") 这将生成以下图表: 我想移动和旋转文本“甚长标签”。我可以使用theme()函数来实现这一点: ggplot(data = xy)

我正在用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")
这将生成以下图表:

我想移动和旋转文本“甚长标签”。我可以使用
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))
这就给了我:

你可以看到我要说的内容,但是边距是不正确的——左边距太大,因为空间是为旋转标签保留的,而上边距对于文本来说太小


如何告诉ggplot我希望y轴标题位于该位置而不旋转,并使其保留适当的空间?

将其放在主绘图标题中:

ggplot(data = xy) +
  geom_point(aes(x = x, y = y)) +
  ggtitle("very long label") +
  theme(plot.title = element_text(hjust = 0))
如果您喜欢使用负数
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))
很明显,这使得在图表中添加一个实际的标题变得很困难。您始终可以使用以下方式手动注释:

grid.text("Actual Title",y = unit(0.95,"npc"))

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

我刚刚遇到了同样的问题,并找到了一个对社区有用的解决方案

其想法是创建一个自定义主题,用字幕替代轴标签。用作示例的绘图如下所示:

p