ggplot2交错轴标签

Mat*_*ers 3 r ggplot2 axis-labels

我正在做一个ggplot.x轴是因子,标签很长.

我不能缩短标签,它们尽可能短.

我有兴趣使标签垂直偏移.我的偏好是将每个奇数标签放在高度为0的位置,每个偶数高度为2个单位,距离x轴更远.

我看过这里,ggplot-hopeful-help,但是在解释发生的事情时遇到了麻烦,所以无法制作一个有用的版本.

有任何想法吗??

(下面的示例代码......我不太擅长格式化代码,看起来...... sry.)

library("ggplot2"); 
stack <- data.frame(value =rnorm(n = 1000, sd = 2, mean=34)); stack$fact <- as.factor(rep(1:5, each=1000/5));
ggplot(stack, aes(x=fact, y=value)) + geom_boxplot(aes(fill=fact))+ scale_x_discrete(breaks=c("1", "2", "3", "4", "5"), labels=c("hi","don't suggest I shorten the text","I need long labels", "This is a long factor label","This label is very long"))
Run Code Online (Sandbox Code Playgroud)

Gre*_*gor 7

理解与否,似乎工作得很好.在你的问题中调用情节your_plot:

your_plot + theme(axis.text.x = element_text(vjust = grid::unit(c(-2, 0, 2), "points")))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

指定首选项theme()是调整ggplot的陷阱的方法.axis.text.x仅修改x轴文本,该文本是使用设置的首选项创建的element_text().您可以指定字体大小,字体系列,旋转角度等element_text().vjust代表"垂直对齐",因此将vjust三个值-2,0和2设置为将这些值应用于连续的x轴标签.(显然负面因素上升,让我感到惊讶.)

使用grid::unit()允许我们指定文本垂直移动的单位(在本例中为点).查看?grid::units显示您可以使用英寸,厘米或其他几个单位.

唯一的问题是与x轴标题的重叠.我认为解决此问题的最简单方法是"\n"在它之前添加几个换行符:

your_plot + 
    theme(axis.text.x = element_text(vjust = grid::unit(c(-2, 0, 2), "points"))) +
    labs(x = "\n\nfact")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

另一种解决方案是旋转文本:

your_plot + theme(axis.text.x = element_text(angle = -90, hjust = 0, vjust = 0))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

为了更多的阅读,ggplot2主题有一个完整的插图.