覆い焼き棒グラフにgeom_textを配置する


96

私はタイトルを一目瞭然にしようとしましたが、ここに行きます-最初にデータ:

dtf <- structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 
4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", "fla"), class = "factor"), 
    ustanova = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
    2L), .Label = c("srednja škola", "fakultet"), class = "factor"), 
    `(all)` = c(42.9542857142857, 38.7803203661327, 37.8996138996139, 
    33.7672811059908, 29.591439688716, 26.1890660592255, 27.9557692307692, 
    23.9426605504587, 33.2200772200772, 26.9493087557604)), .Names = c("variable", 
"ustanova", "(all)"), row.names = c(NA, 10L), class = c("cast_df", 
"data.frame"), idvars = c("variable", "ustanova"), rdimnames = list(
    structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 
    3L, 4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", 
    "fla"), class = "factor"), ustanova = structure(c(1L, 2L, 
    1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("srednja škola", 
    "fakultet"), class = "factor")), .Names = c("variable", "ustanova"
    ), row.names = c("vma_srednja škola", "vma_fakultet", "vla_srednja škola", 
    "vla_fakultet", "ia_srednja škola", "ia_fakultet", "fma_srednja škola", 
    "fma_fakultet", "fla_srednja škola", "fla_fakultet"), class = "data.frame"), 
    structure(list(value = structure(1L, .Label = "(all)", class = "factor")), .Names = "value", row.names = "(all)", class = "data.frame")))

そして、覆い隠さcoord_flipれたバープロットを作成し、を実行して、バー内にテキストラベルをいくつか配置します。

ggplot(bar) + geom_bar(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
 geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`)), position = "dodge") +
 coord_flip()

ここで出力を確認できます

ここに画像の説明を入力してください

私は些細なことを求めていると思います。スタックされたバーを「フォロー」するテキストラベルが欲しい。ラベルはy軸に正しく配置されていますが、x軸に正しく配置するにはどうすればよいですか?


ええと...私はこれをggplot2メーリングリストに投稿するべきでした。私はクロスポストしたくないので、忍耐力のある帽子をかぶって、@ hadleyが何かを思い付くのを待ちます!=)
aL3xa

私は間違っていた。そして、どうやらggplotパッケージについてもっと知る必要がある。
Joris Meys、

回答:


154

これは、あなたの望むことですか?

ggplot(bar) + 
  geom_bar(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
  geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`)), 
            position = position_dodge(width = 1)) + 
  coord_flip()

キーはのposition = position_dodge(width = 1)代わりに使用していposition = "dodge"ます。これは、パラメータのない単なるショートカットです。

ここに画像の説明を入力してください


ではggplot2_2.0.0では、あなたのいくつかの例を見つける?geom_text方法は、位置へgeom_textかわし、積層バー上(「コードネームチャンク# Aligning labels and bars")ザQ&A position_dodgeの幅引数は何が?話題のより完全な説明を提供します。


1
まさに私が欲しいもの!私はあなたにこれのためのビールを借りています!=)
aL3xa

2
これを自動化する方法はありませんか?常に幅を指定する必要がありますか?
vashts85 2016年

12
これは私fill = ustanovageom_textレイヤーに追加した後でのみ機能しました。特に、多くの水平バー(xあたり3以上のバーにのみ必要)があり、テキストの分割数がバーの場合と同じでなければならない場合に特に意味があります。 。
アラン・

3
ファセットとダッジの場合、これは有用な回答です。stackoverflow.com
Tyler Rinker

私がstackoverflowで行ったすべての検索の中で@アラン、あなたの答えは私の問題を解決した唯一のものでした。
Ga13
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.