更改 ggplot 比例中的轴位置可以忽略 theme(axis.text) 的 hjust/vjust

Altering axes positions in ggplot scales lets hjust/vjust of theme(axis.text) to be ignored

提问人:Finn Lübber 提问时间:9/21/2023 更新时间:9/21/2023 访问量:33

问:

我想创建一个 x 轴位于顶部且轴标签旋转 90 度的绘图,与刻度中心对齐。这是我的代码:

library(tidyverse)

# create data
a3 <- rnorm(100, 0, 1)
aaa4 <- rnorm(100, 0, 1)
aaaa5 <- rnorm(100, 0, 1)

df_2 <- data.frame(a3, aaa4, aaaa5)

correlation_matrix_2 <- cor(df_2)

corr_long <- correlation_matrix_2 %>% 
  as.data.frame(.) %>% 
  rownames_to_column(., var = "V1") %>% 
  pivot_longer(., cols = -V1, names_to = "V2", values_to = "r")

# plot:
ggplot(corr_long, aes(V1, V2))+
  geom_tile(mapping = aes(fill = r))+
  scale_x_discrete(position = "top")+
  theme(axis.text.x = element_text(size = 16, angle = 90, hjust = 0, vjust = .5))

但是,该图忽略了主题的 vjust 参数,并且总是将标签定位得有点偏离。仅当使用scale_x_discrete中的位置参数将轴设置为顶部时,才会发生这种情况,它适用于“底部”。在这两种情况下,hjust 都按预期工作。

然后我尝试了其他一些方法,发现当 y 轴设置在右侧时也会发生这种情况,但随后忽略了 hjust,vjust 起作用。它也发生在 scale_x/y_continuous。更改顺序(先更改主题,然后更改scale_x_discrete)也不会更改任何内容,并且将其拆分为两个单独的命令也不起作用:

[...]
theme(axis.text.x = element_text(hjust = 0))+
theme(axis.text.x = element_text(vjust = 1))+
[...]

这是一个错误还是我在这里遗漏了什么?

r ggplot2 位置 轴标签

评论

1赞 nrennie 9/21/2023
尝试使用函数的参数而不是 - 该参数在这里工作正常。axis.text.x.toptheme()axis.text.xvjust
0赞 Finn Lübber 9/21/2023
太好了,这很有效,谢谢!我仍然不太明白为什么某些参数在这两种情况下都有效,但我对它的工作原理感到满意。如果您发表评论作为答案,我会接受。
0赞 stefan 9/21/2023
这取决于 设置的默认值,例如,通常继承自 。但是,for 默认值是显式设置为的,因此不会继承自 。themeaxis.text.x.topaxis.text.xtheme_greyvjustaxis.text.x.topaxis.text.x
0赞 Finn Lübber 9/21/2023
谢谢你的解释!对我来说,如果 axis.text.x.top 继承 axis.text.x 时,无论主题如何,当 scale_x_(position = “top”) 时,它会更直观。

答:

0赞 nrennie 9/21/2023 #1

您可以使用函数的参数而不是 来调整轴文本在顶部的位置。同样,您可以使用右侧的 y 轴文本。例如:axis.text.x.toptheme()axis.text.xaxis.text.y.right

ggplot(corr_long, aes(V1, V2))+
  geom_tile(mapping = aes(fill = r))+
  scale_x_discrete(position = "top")+
  theme(axis.text.x.top = element_text(size = 16, angle = 90, hjust = 0, vjust = .5))