协慌网

登录 贡献 社区

ggplot2 中的旋转和间隔轴标签

我有一个图,其中 x 轴是标签长的一个因素。虽然可能不是理想的可视化效果,但现在我想简单地将这些标签旋转为垂直。我已经用下面的代码弄清楚了这部分,但是正如您所看到的,标签并不完全可见。

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + opts(axis.text.x=theme_text(angle=-90))

在此处输入图片说明

答案

将最后一行更改为

q + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

默认情况下,即使旋转,轴也将在文本的中心对齐。当您旋转 +/- 90 度时,通常希望它在边缘对齐:

替代文字

上面的图片来自此博客文章

使用coord_flip()

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))

qplot(cut, carat, data = diamonds, geom = "boxplot") +
  coord_flip()

在此处输入图片说明


添加str_wrap()

# wrap text to no more than 15 spaces
library(stringr)
diamonds$cut2 <- str_wrap(diamonds$cut, width = 15)
qplot(cut2, carat, data = diamonds, geom = "boxplot") +
  coord_flip()

在此处输入图片说明


在数据科学 R 的第 3.9 章中,Wickham 和 Grolemund 谈到了这个确切的问题:

coord_flip()切换 x 和 y 轴。如果要水平框线图,这很有用(例如)。这对于长标签也很有用:在不重叠 x 轴的情况下很难使它们适应。

要使刻度标签上的文本完全可见并以与 y 轴标签相同的方向读取,请将最后一行更改为

q + theme(axis.text.x=element_text(angle=90, hjust=1))