如何在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
,但这也会将轴文本向下移动。我还尝试了vjust
和hjust
的几种组合,但仍然无法获得所需的输出。有没有办法让 axis.text
与 ggplot2 对齐,如第二个图(使用 libreoffice draw 手动创建)所示?
【问题讨论】:
我认为这不可能。您向左/向右或向上/向下移动一条线(使用 hjust 和 vjust)的任何数量都会将它们全部移动相同的数量,因此差距仍然太小。出于这个原因,我真的强烈建议我的同事不要使用除 0 或 90 之外的任何角度;太拥挤了。 可能您可以将其更改为“Hornet\nSportabout\n”以尝试将狭窄的间隙分开到两侧,但这是黑客行为,当您仔细观察时,它永远不会均匀分布。跨度> 我认为如果角度为 90 则很难阅读。 如果优先考虑易于阅读,我通常会将文本标签放在垂直轴上(在必要时使用coord_flip
,对于某些几何图形)。否则,即使是最好的多线 x 轴标签也总是会出现丑陋的情况。例如。标签太长/包含太多换行符,字体大小相对于绘图大小太大,等等。
@Z.Lin,感谢您的建议。问题是y轴标签也很长而且太多(~40)。
【参考方案1】:
此图使用默认的width
和height
从Rstudio
导出。
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轴文本?的主要内容,如果未能解决你的问题,请参考以下文章