Ggplotを使用してプロットを作成するたびに、次のような行でhjustとvjustに異なる値を試しながら少し時間を費やします。
+ opts(axis.text.x = theme_text(hjust = 0.5))
軸ラベルが軸にほぼ接触する場所で軸ラベルを整列させて、それに対してフラッシュします(いわば軸に合わせて)。しかし、私は何が起こっているのか本当に理解していません。多くの場合、hjust = 0.5
はhjust = 0.6
とは劇的に異なる結果をもたらします。たとえば、異なる値で遊んだだけではそれを理解できませんでした。
誰もがhjustとvjustオプションがどのように機能するかの包括的な説明を私に指摘できますか?
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))
軸テキストのhjust
を変更するとどうなるかを理解するには、軸テキストの水平方向の配置がx軸ではなくプロット全体(yを含む場合)に関連して定義されることを理解する必要があります-axis text)。 (これは、私の考えでは残念なことです。軸に対して位置合わせする方がはるかに便利です。)
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)
軸ラベルの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)
おそらく最も決定的なのはggplot2本の図B.1(d)であり、その付録は http://ggplot2.org/book/ appendices.pdf 。
ただし、それほど単純ではありません。 hjust
およびvjust
は、説明どおり、geom_text
およびtheme_text
(時々)での動作方法を示します。それを考える1つの方法は、テキストの周りのボックスと、そのボックスに関連する参照ポイントの位置を、ボックスのサイズに応じた単位で考えることです(したがって、異なるサイズのテキストでは異なります)。 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))
後者の3つのプロットは同じです。なぜだか分かりません。また、テキストを回転させると、より複雑になります。検討する
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番目のラベルはいくつかのボックスの中央に揃えられて中央が揃えられ、3番目のラベルは右揃えにされています(したがって、右側が軸の隣に揃えられます)。最後の1つは、まあ、一貫した方法で説明できません。テキストのサイズ、最も幅の広いテキストのサイズに関係がありますが、他にどのようなものかわかりません。