如何在ggplot中增加*旋转* y轴上的文本和标题之间的距离?

时间:2015-02-24 16:34:28

标签: r ggplot2

我正在开发一个自定义ggplot主题,其中包括水平旋转的y轴标签,我想增加刻度标签和轴标签之间的间距。 This post建议调整vjust参数,但在这种情况下这不合适。对齐(例如,框内的左侧或右侧)与该框相对于刻度标签的间距不同。

例如axis.title.y=element_text(angle=0, vjust=1, hjust=1)),然后我得到正确的对齐方式,但它太靠近刻度标签:

image with hjust=1

如果我设置hjust=2,则文本不再正确刷新:

image with hjust=2

我使用了margin主题选项,但我不认为它们适用于此处。有什么想法吗?

编辑这是一个简单的MWE,可根据要求进行测试:

df <- data.frame(x=1:10, y=1:10)
ggplot(df, aes(x,y)) +
    geom_line() +
    theme(axis.title.y=element_text(angle=0, vjust=1, hjust=1)) +
    labs(y="This\nis a\nreally long\naxis\nlabel")

2 个答案:

答案 0 :(得分:3)

我最终想到了这一点,它需要调整底层的gtable。

library(ggplot2)
library(grid)
library(gtable)
df <- data.frame(x=1:10, y=1:10)
gg <- ggplot(df, aes(x,y)) +
    geom_line() +
    theme(axis.title.y=element_text(angle=0, vjust=1, hjust=1)) +
    labs(y="This\nis a\nreally long\naxis\nlabel")

# Get the table for the ggplot object
g <- ggplotGrob(gg)

# Insert a new column 0.25 inches wide after the second column
# Use gtable_show_layout(g) to figure out which column number to use
g2 <- gtable_add_cols(g, width=unit(0.25, "in"), pos=2)

# Plot the result
grid.draw(g2)

答案 1 :(得分:0)

您可以在主题选项中使用plot.margin。你可以将你的hjust设置为-10,然后改变plot.margin中的最后一个数字(参数是up,right,bot,left)。

试着举例:

库(网格)

df <- data.frame(x=1:10, LongAxisLabel=1:10)
ggplot(df, aes(x,LongAxisLabel)) +
  geom_line() +
  theme(axis.title.y=element_text(angle=0, vjust=1, hjust=-1))+
  theme(plot.margin = unit(c(1,1,1,1), "cm"))

干杯, 罗曼


在查询对齐问题之后。我用标签周围的函数expression()更新了代码。见下文,我得到了你想要的东西。请告诉我们。

library(grid)
df <- data.frame(x=1:10, y=1:10)
ggplot(df, aes(x,y)) + 
  geom_line() + 
  theme(axis.title.y=element_text(angle=0, vjust=1, hjust=-1), plot.margin=unit(c(3,1,1,3), "cm")) + 
  labs(y=expression("This\nis a\nreally long\naxis\nlabel"))

enter image description here