【问题标题】:How to align rotated multi-line x axis text in ggplot2?如何在ggplot2中对齐旋转的多行x轴文本?
【发布时间】: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)。

标签: r ggplot2


【解决方案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

【讨论】:

  • 我想你误解了我的问题。此窗台产生锚定在右上角位置的轴文本,我想要的更像是锚定在右中位置。
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 2012-06-30
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多