1. ホーム
  2. r

[解決済み] ggplotのファセットの順番を固定する

2022-07-30 03:58:37

質問

データです。

df <- data.frame(
    type   = c("T", "F", "P", "T", "F", "P", "T", "F", "P", "T", "F", "P"), 
    size   = c("50%", "50%", "50%", "100%", "100%", "100%", "150%", "150%", "150%", "200%", "200%", "200%"),
    amount = c(48.4, 48.1, 46.8, 25.9, 26, 24.9, 21.1, 21.4, 20.1, 20.8, 21.5, 16.5)
)

上記のデータをggplotで棒グラフにしたいのですが(x軸 -> type , y-軸 -> amount によるグループ size ). 以下のコードを使用した場合、私は変数 type と同じように size をデータに示された順番に並べます。図をご覧ください。その際、以下のようなコードを使用しました。

 ggplot(df, aes(type, amount , fill=type, group=type, shape=type, facets=size)) + 
  geom_col(width=0.5, position = position_dodge(width=0.6)) + 
  facet_grid(.~size) + 
  theme_bw() + 
  scale_fill_manual(values = c("darkblue","steelblue1","steelblue4"), 
                    labels = c("T", "F", "P"))

<イグ .

順序の問題を解決するために、変数 "type"に対して、以下のようにファクターメソッドを使用しています。図もご覧ください。

temp$new = factor(temp$type, levels=c("T","F","P"), labels=c("T","F","P")) 

<イグ

しかし、今、私は、変数 size . それは50%、100%であるべきです。150%、そして200%です。

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

によって、サイズをデータフレームの要因にする。

temp$size_f = factor(temp$size, levels=c('50%','100%','150%','200%'))

次に facet_grid(.~size)facet_grid(.~size_f)

次にプロットします。

これでグラフは正しい順番になりました。