Geom_textを使用して散布図の範囲外のポイントにラベルを付ける。定義により、これらのポイントはキャンバスのエッジに近い傾向があります。通常、少なくとも1つのWordがキャンバスのエッジと重なり、役に立たなくなります。
明らかに、以下の場合、+ xlim(c(1.5, 4.5))
を使用して手動で解決できます。
# test
df <- data.frame(Word = c("bicycle", "tricycle", "quadricycle"),
n.wheels = c(2,3,4),
utility = c(10,6,7))
ggplot(data=df, aes(x=n.wheels, y=utility, label=Word)) + geom_text() + xlim(c(1.5, 4.5))
ただし、これは理想的ではありません。
この問題を検索しても解決策は見つかりません。HadleyWickhamは、ggplot2のラベルが半分にカットされていることに満足しているようです ヘルプページ (私はHadleyを知っています。これらは単なる例です;)
ggplot 2.0. クリッピングに役立つ可能性のあるgeom_text()
のhjust
およびvjust
の新しいオプションを導入。特に"inward"
。できること:
ggplot(data=df, aes(x=n.wheels, y=utility, label=Word)) +
geom_text(vjust="inward",hjust="inward")
これはscale_continuous
のexpand
の良い使い方だと思います:
ggplot(data=df, aes(x=n.wheels, y=utility, label=Word)) + geom_text() +
scale_x_continuous(expand = c(.1, .1))
データを(乗法的および加法的に)パディングして、スケール制限を計算します。本当に長い言葉がない限り、デフォルトから少し上げるだけで十分でしょう。詳細については、?expand_scale
を参照してください。また、軸の上部または下部の範囲のみを拡張するなどの追加オプションもご覧ください。 ?expand_scale
の一番下の例から、デフォルトは離散スケールの場合は加法0.6、連続スケールの場合は乗法0.05のように見えます。
クリッピングをオフにすることができます。あなたの例では、それはとてもうまくいきます。
p <- ggplot(data=df, aes(x=n.wheels, y=utility, label=Word)) + geom_text()
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid::grid.draw(gt)
誰かがこれを少し速くプログラミングする方法を考え出すことができると確信していますが、ここでは特に範囲がすべて異なる複数のファセットで使用できる答えがあります-異なるxに2つのファセットを持つようにdata.frameを変更しましたyスケール:
_df <- data.frame(Word = c("bicycle", "tricycle", "quadricycle"),
n.wheels = c(2,3,4, .2, .3, .4),
utility = c(10,6,7, 1, .6, .7),
facet = rep(c("one", "two"), each = 3))
_
次に、各ファセットの範囲xとyの幅を決定するダミーデータフレームを作成し(たとえば、diff(range(n.wheels))
)、その幅を適切な数で割ります(ラベルの長さに応じて、I 8)を選択し、各ファセットのx値とy値の最小値と最大値にそのパディングを追加します。
_pad <- rbind(ddply(df, .(facet), summarize,
n.wheels = min(n.wheels) - diff(range(n.wheels))/8,
utility = min(utility) - diff(range(utility))/8),
ddply(df, .(facet), summarize,
n.wheels = max(n.wheels) + diff(range(n.wheels))/8,
utility = max(utility) + diff(range(utility))/8))
pad$Word <- NA
_
次に、そのレイヤーを色をNAに設定してプロットに追加できます。
_ggplot(data=df, aes(x=n.wheels, y=utility, label = Word)) +
geom_text() +
geom_point(data = pad, aes(x = n.wheels, y = utility), colour = NA) +
facet_wrap(~facet, ncol = 1, scales = "free")
_
結果:カットオフラベルのない再現可能な「自動化された」プロット(後でスケールを変更してきれいにすることができます...)