DF <- data.frame(x=c("a","b","cdefghijk","l"),y=1:4)
p <- ggplot(DF, aes(x,y)) + geom_point()
p + opts(axis.text.x=theme_text(vjust=0))
p + opts(axis.text.x=theme_text(vjust=1))
p + opts(axis.text.x=theme_text(vjust=2))
后三个图是相同的 . 我不知道为什么会这样 . 此外,如果文本被旋转,则更复杂 . 考虑
p + opts(axis.text.x=theme_text(hjust=0, angle=90))
p + opts(axis.text.x=theme_text(hjust=0.5 angle=90))
p + opts(axis.text.x=theme_text(hjust=1, angle=90))
p + opts(axis.text.x=theme_text(hjust=2, angle=90))
2 回答
hjust
和vjust
的值仅定义在0和1之间:0表示左对齐
1表示右对齐
资料来源:ggplot2,Hadley Wickham,第196页
(是的,我知道在大多数情况下你可以使用它超出这个范围,但不要指望它以任何特定的方式运行 . 这是在规范之外 . )
hjust
控制水平对齐和vjust
控制垂直对齐 .一个例子应该明确这一点:
要了解更改轴文本中的
hjust
时会发生什么,您需要了解轴文本的水平对齐是相对于x轴定义的,而是定义为整个图(其中包括y轴文本) . (在我看来,这是不幸的 . 相对于轴进行对齐会更有用 . )要探索轴标签的
vjust
对象会发生什么:可能最明确的是ggplot2书的 Figure B.1(d) ,其附录可在http://ggplot2.org/book/appendices.pdf获得 .
然而,它并不那么简单 .
hjust
和vjust
如所描述的那样它在geom_text
和theme_text
(有时)中是如何工作的 . 想到它的一种方法是考虑文本周围的框,以及参考点与该框相关的位置,以相对于框大小的单位(因此对于不同大小的文本而言不同) .hjust
为0.5,vjust
为0.5,参考点上的框为中心 . 减少hjust
将框移动右侧的宽度乘以0.5-hjust
. 因此,当hjust=0
时,框的左边缘位于参考点 . 增加hjust
将框的左侧移动一定数量的框宽度hjust-0.5
. 当hjust=1
时,框从中心向左移动半个框宽度,这将右边缘放在参考点上 . 如果是hjust=2
,则框的右边缘是参考点左侧的框宽度(中心是参考点左侧的2-0.5=1.5
框宽度 . 对于垂直,较少的是向上,更多是向下 . 这实际上是图B.1 (d)说,但它推断超过[0,1] .但是,有时这不起作用 . 例如
后三个图是相同的 . 我不知道为什么会这样 . 此外,如果文本被旋转,则更复杂 . 考虑
第一个标签左对齐(靠近底部),第二个让它们居中在某个框中,使它们的中心对齐,第三个让它们右对齐(所以它们的右边在轴旁边排列) . 最后一个,好吧,我无法以连贯的方式解释 . 它与文本的大小,最宽文本的大小有关,我不知道还有什么 .