Help us understand the problem. What is going on with this article?

ggplot2 で geom_text() を使って集合棒グラフにラベルを付けたい #rstatsj

More than 3 years have passed since last update.

本記事は ggplot2逆引き プロジェクトの一環として、Stack Overflow の下記記事を翻訳したものです。
ggplot: geom_text with dodged barplot

質問

タイトル通りのことをやりたくて、自分でやってみたのですが、ダメです。

まずはデータを用意します。

R
data <- data.frame(
  variable = gl(5, 2, labels = c("vma", "vla", "ia", "fma", "fla")),
  ustanova = gl(2, 1, 10, labels = c("srednja skola", "fakultet")),
  all = c(42.9, 38.7, 37.8, 33.7, 29.5, 26.1, 27.9, 23.9, 33.2, 26.9)
)

data
結果
   variable      ustanova  all
1       vma srednja skola 42.9
2       vma      fakultet 38.7
3       vla srednja skola 37.8
4       vla      fakultet 33.7
5        ia srednja skola 29.5
6        ia      fakultet 26.1
7       fma srednja skola 27.9
8       fma      fakultet 23.9
9       fla srednja skola 33.2
10      fla      fakultet 26.9

集合棒グラフを作り、coord_flip() で横向きにして、棒の内側にテキストを付けたいのですが、

R
library(ggplot2)
ggplot(data) + 
  geom_bar(aes(x=variable, y=all, fill=ustanova), position="dodge", stat="identity") +
  geom_text(aes(x=variable, y=all, label=sprintf("%2.1f", all))) + 
  coord_flip()

結果はこのようになります。

bar1.png

私の質問は非常に基礎的なことかもしれません。
テキストラベルが棒に「ついていく」ようにしたいのです。
ラベルは y 軸に対しては正しく配置されています。
しかし、どのようにすれば x 軸に対しても正しく配置されるのでしょうか?

回答

こういうことかな?

R
ggplot(data) + 
  geom_bar(aes(x=variable, y=all, fill=ustanova), stat="identity", position="dodge") +
  geom_text(aes(x=variable, y=all, group=ustanova, label=sprintf("%2.1f", all)), 
            position=position_dodge(width=0.9)) +
  coord_flip()

bar2.png

ポイントは position = "dodge" の代わりに position = position_dodge(width=0.9) を使うことと、geom_text() の中で group を指定してやることです。
position = "dodge"position_dodge() のパラメータを指定しない単なるショートカットにすぎません。

補足

テキストラベルを棒の「内側に」表示したい場合は、hjustvjust を使います。

R
ggplot(data) + 
  geom_bar(aes(x=variable, y=all, fill=ustanova), stat="identity", position="dodge") +
  geom_text(aes(x=variable, y=all, group=ustanova, label=sprintf("%2.1f", all), hjust=1.4), 
            position=position_dodge(width=0.9)) +
  coord_flip()

bar3.png

また、積み上げ棒グラフに対して同様のことを行うには、次のように書きます。

R
ggplot(data) + 
  geom_bar(aes(x=variable, y=all, fill=ustanova), stat="identity", position="stack") +
  geom_text(aes(x=variable, y=all, label=sprintf("%2.1f", all)), position="stack") +
  coord_flip()

bar4.png

参考

関連

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away