我很难理解ggplot的axis.text.x的交互:angle
、hjust
和vjust
。我读到的所有内容都适用于Angular 在0到45之间的情况,但不适用于Angular 〉45和〈90的情况。
下面是一个最小的可重复示例:
library(ggplot2)
p <- ggplot(mtcars, aes(1000 * mpg, hp)) +
geom_point()
angle = 90
的第一个图看起来和预期的一样,
p + theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))
但是,与上面的图相比,当Angular 仅减小1度时(从angle = 90
到angle = 89
),轴标签向下移动。
p + theme(axis.text.x = element_text(angle = 89, hjust = 1, vjust = 0.5))
任何见解赞赏。
2条答案
按热度按时间bxjv4tth1#
这种行为的原因一直存在于未导出的函数
ggplot2:::rotate_just()
中,如果您在ggplot2:::element_grob.element_text
-〉titleGrob
-〉title_spec
上运行debug,则可以找到该函数。这是它的代码,在我当前的包版本(ggplot 2 3.4.2)中:
在第一种情况下,使用
angle = 90, hjust = 1, vjust = 0.5
,满足第二组条件,因此修改后的值为hjust = 0.5, vjust = 1
。在第二种情况下,对于
angle = 89, hjust = 1, vjust = 0.5
,满足第一组条件,因此值保持不变,为hjust = 1, vjust = 0.5
。如果你想让第二种情况的垂直对齐方式模仿第一种情况,设置
vjust = 1
就可以了(虽然我认为这是理论上的边缘情况,因为我想不出很多理由来使用angle = 89而不是真实的生活中的90...)zqdjd7g92#
尝试同时指定
vjust = 0.5
和hjust = 0.5
,这样就可以避免这个问题。