如何在ggplot2中对齐旋转的多行x轴文本?

Posted

技术标签:

【中文标题】如何在ggplot2中对齐旋转的多行x轴文本?【英文标题】:How to align rotated multi-line x axis text in ggplot2? 【发布时间】:2018-01-30 04:27:22 【问题描述】:

这是我目前拥有的示例:

x <- head(mtcars)
x$rn <- rownames(x)
x$rn[5] <- 'Hornet\nSportabout'

library(ggplot2)

ggplot(x, aes(x = rn, y = mpg)) + geom_point() +
    theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
ggsave('test.png', width = 3, height = 3)

剧情如下:

如您所见,'Hornet\nSportabout' 离下一个太近了,我想将它向左移动一点。预期的 x 轴文本如下所示:

我认为我应该设置vjust = 0.5,但这也会将轴文本向下移动。我还尝试了vjusthjust 的几种组合,但仍然无法获得所需的输出。有没有办法让 axis.text 与 ggplot2 对齐,如第二个图(使用 libreoffice draw 手动创建)所示?

【问题讨论】:

我认为这不可能。您向左/向右或向上/向下移动一条线(使用 hjust 和 vjust)的任何数量都会将它们全部移动相同的数量,因此差距仍然太小。出于这个原因,我真的强烈建议我的同事不要使用除 0 或 90 之外的任何角度;太拥挤了。 可能您可以将其更改为“Hornet\nSportabout\n”以尝试将狭窄的间隙分开到两侧,但这是黑客行为,当您仔细观察时,它永远不会均匀分布。跨度> 我认为如果角度为 90 则很难阅读。 如果优先考虑易于阅读,我通常会将文本标签放在垂直轴上(在必要时使用coord_flip,对于某些几何图形)。否则,即使是最好的多线 x 轴标签也总是会出现丑陋的情况。例如。标签太长/包含太多换行符,字体大小相对于绘图大小太大,等等。 @Z.Lin,感谢您的建议。问题是y轴标签也很长而且太多(~40)。 【参考方案1】:

此图使用默认的widthheightRstudio 导出。

picture exported with default values

您也可以使用包grDevices 来做同样的事情。代码将是这样的:

library(grDevices)
png("test1.png",width = 592, height = 379, units = "px")
ggplot(ggplot(x, aes(x = rn, y = mpg)) + geom_point() + theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) 
dev.off()

现在可以在当前工作目录中看到文件test1.png

【讨论】:

我想你误解了我的问题。此窗台产生锚定在右上角位置的轴文本,我想要的更像是锚定在右中位置。

以上是关于如何在ggplot2中对齐旋转的多行x轴文本?的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化多行文本轴标签轴标签带下标轴标签数学公式实战

如何在ggplot2的注释中左对齐文本

在ggplot2中更改轴文本的字体大小和方向

r 旋转ggplot2 x轴标签

如何使用ggplot2格式化带有轴标签和旋转的R中的雷达图

r 将多个ggplot2图与一个共同的x轴和不同的y轴对齐,每个轴都有不同的y轴标签。