我正在开发一个自定义ggplot主题,其中包括水平旋转的y轴标签,我想增加刻度标签和轴标签之间的间距。 This post建议调整vjust
参数,但在这种情况下这不合适。对齐(例如,框内的左侧或右侧)与该框相对于刻度标签的间距不同。
例如axis.title.y=element_text(angle=0, vjust=1, hjust=1))
,然后我得到正确的对齐方式,但它太靠近刻度标签:
如果我设置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")
答案 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"))