R语言 将矢量化的输入传递给element_text的正确方法?

hc2pp10m  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(151)

我经常发现自己想要根据它们的位置不同地对齐图上的x轴标签,左边的值左对齐,右边的值右对齐。然而,element_text没有official support for vectorized input(和never will?),所以我想知道如何以正确的ggplot2方式解决这个问题。
问题:重叠的x轴标签(并在最右侧截断)

library(ggplot2)
v <- data.frame(x=1:2, y=1:2, facet=gl(2, 2))
gp <- ggplot(v) +
  geom_point(aes(x=x, y=y)) +
  scale_x_continuous(breaks = 1:2, labels = c("Minimum", "Maximum")) +
  facet_wrap(~facet)
gp

我的解决方案:

gp + theme(axis.text.x = element_text(hjust=c(0, 1)))

除了:

Warning message:
Vectorized input to `element_text()` is not officially supported.
ℹ Results may be unexpected or may change in future versions of ggplot2.

如果不支持矢量化element_text,ggplot中不同对齐文本的正确方法是什么?

fcwjkofz

fcwjkofz1#

Claus Wilke在这里声明,他的ggtext包确实支持以这种方式使用vector,并且它将在未来继续支持它。正如thomasp 85(Thomas Lin Pedersen)在帖子中所说的“FWIW,我认为大多数这种黑客的用例都可以使用element_markdown()正确解决”。这是否解决了你的问题?即

library(ggplot2)
library(ggtext)

v <- data.frame(x=1:2, y=1:2, facet=gl(2, 2))
gp <- ggplot(v) +
  geom_point(aes(x=x, y=y)) +
  scale_x_continuous(breaks = 1:2, labels = c("Minimum", "Maximum")) +
  facet_wrap(~facet)
gp

gp +
  theme(axis.text.x = element_markdown(hjust = c(0, 1)))

创建于2023-04-11带有reprex v2.0.2

相关问题