R语言 ggplot2交错轴标签

aelbi1ox  于 2023-03-15  发布在  其他
关注(0)|答案(3)|浏览(190)

我正在做一个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"))
gstyhher

gstyhher1#

不管你理解与否,它似乎运行得很好,把你问题中的情节称为your_plot

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

theme()中指定首选项是调整ggplot的陷阱的方法。axis.text.x仅修改x轴文本,该文本是使用element_text()设置的首选项创建的。您可以在element_text()中指定字体大小、字体系列、旋转Angular 等。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")

另一个解决办法是轮换案文:

your_plot + theme(axis.text.x = element_text(angle = -90, hjust = 0, vjust = 0))

有关更多阅读,请访问there's a whole vignette on ggplot2 theming

e4yzc0pl

e4yzc0pl2#

由于3.3.0版本中添加了guide_axisggplot2现在提供了一个开箱即用的选项,可以使用guide_axisn.dogde参数在多行上放置轴标签:

library(ggplot2)

set.seed(123)

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"
    ),
    guide = guide_axis(n.dodge = 2)
  )

jxct1oxe

jxct1oxe3#

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"))+
theme(axis.text.x = element_text(vjust = grid::unit(c(0, 2), "points"))) + 
theme(axis.title.x = element_text(vjust = -0.6))

实际上the link you reported中讨论的解决方案只需要稍微修改一下。

theme(axis.title.x = element_text(vjust = -0.6))

降低x轴标签以防止重叠。

相关问题