1. ホーム
  2. r

[解決済み] かわした棒グラフの上に geom_text を配置する

2022-07-25 12:25:19

質問

タイトルはわかりやすいものにしようと思いましたが、まずデータからです。

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軸に正しく配置するにはどうしたらよいでしょうか?

どのように解決するのですか?

これはあなたが望むものですか?

library(ggplot2)

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

キーは position = position_dodge(width = .9) (ここで .9 はバーのデフォルトの幅です)ではなく position = "dodge" これはパラメータなしの単なるショートカットです。さらに group=ustanova の美学を geom_text によるラベルをかわすために ustanova (第二の選択肢は fill = ustanova をグローバルな美学として ggplot(bar, aes(fill = ustanova))

<イグ


ggplot2_2.0.0 には、いくつかの例があります。 ?geom_text をどのように配置するかについて geom_text を、かわされたバーや積み重ねられたバー上に配置する方法について説明します(" という名前のコードチャンク。 # Aligning labels and bars" ). Q&A position_dodgeのwidth引数とは何ですか? には、より詳細な説明があります。