每次我使用ggplot创建一个情节时,我会花一点时间尝试不同的值来调整hjust和vjust
+ opts(axis.text.x = theme_text(hjust = 0.5))
Run Code Online (Sandbox Code Playgroud)
使轴标签在轴标签几乎接触轴的位置排成一行,并与轴齐平(可以说是轴对齐).但是,我真的不明白发生了什么.通常情况下,hjust = 0.5
会产生如此显着不同的结果hjust = 0.6
,例如,我只是通过玩弄不同的值来解决这个问题.
谁能指点我对hjust和vjust选项如何工作的全面解释?
And*_*rie 242
的值hjust
和vjust
仅在0和1之间限定:
资料来源:ggplot2,Hadley Wickham,第196页
(是的,我知道在大多数情况下你可以使用它超出这个范围,但不要指望它以任何特定的方式运行.这是在规范之外.)
hjust
控制水平对齐并vjust
控制垂直对齐.
一个例子应该明确这一点:
td <- expand.grid(
hjust=c(0, 0.5, 1),
vjust=c(0, 0.5, 1),
angle=c(0, 45, 90),
text="text"
)
ggplot(td, aes(x=hjust, y=vjust)) +
geom_point() +
geom_text(aes(label=text, angle=angle, hjust=hjust, vjust=vjust)) +
facet_grid(~angle) +
scale_x_continuous(breaks=c(0, 0.5, 1), expand=c(0, 0.2)) +
scale_y_continuous(breaks=c(0, 0.5, 1), expand=c(0, 0.2))
Run Code Online (Sandbox Code Playgroud)
要了解更改hjust
轴内文本时会发生什么,您需要了解轴文本的水平对齐是相对于x轴定义的,而是定义为整个绘图(其中包括y轴文本).(在我看来,这是不幸的.相对于轴进行对齐会更有用.)
DF <- data.frame(x=LETTERS[1:3],y=1:3)
p <- ggplot(DF, aes(x,y)) + geom_point() +
ylab("Very long label for y") +
theme(axis.title.y=element_text(angle=0))
p1 <- p + theme(axis.title.x=element_text(hjust=0)) + xlab("X-axis at hjust=0")
p2 <- p + theme(axis.title.x=element_text(hjust=0.5)) + xlab("X-axis at hjust=0.5")
p3 <- p + theme(axis.title.x=element_text(hjust=1)) + xlab("X-axis at hjust=1")
library(ggExtra)
align.plots(p1, p2, p3)
Run Code Online (Sandbox Code Playgroud)
要探索vjust
轴标签对齐会发生什么:
DF <- data.frame(x=c("a\na","b","cdefghijk","l"),y=1:4)
p <- ggplot(DF, aes(x,y)) + geom_point()
p1 <- p + theme(axis.text.x=element_text(vjust=0, colour="red")) +
xlab("X-axis labels aligned with vjust=0")
p2 <- p + theme(axis.text.x=element_text(vjust=0.5, colour="red")) +
xlab("X-axis labels aligned with vjust=0.5")
p3 <- p + theme(axis.text.x=element_text(vjust=1, colour="red")) +
xlab("X-axis labels aligned with vjust=1")
library(ggExtra)
align.plots(p1, p2, p3)
Run Code Online (Sandbox Code Playgroud)
Bri*_*ggs 14
可能最明确的是ggplot2书的图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].
但是,有时这不起作用.例如
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))
Run Code Online (Sandbox Code Playgroud)
后三个图是相同的.我不知道为什么会这样.此外,如果文本被旋转,则更复杂.考虑
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))
Run Code Online (Sandbox Code Playgroud)
第一个标签左对齐(靠近底部),第二个让它们居中在某个框中,使它们的中心对齐,第三个让它们右对齐(所以它们的右边在轴旁边排列).最后一个,好吧,我无法以连贯的方式解释.它与文本的大小,最宽文本的大小有关,我不知道还有什么.