LoginSignup
1
0

x軸に指定したカテゴリカルな値を平均値で並べ替える&x軸にNAが入っている場合の対処(ggplot2)

Last updated at Posted at 2023-06-13

カテゴリカルな値をx軸に指定するとプロット時に困ることがある

たとえば以下のようなデータから箱ひげ図を作る場合

library(tidyverse)

d <- tibble(
  id = 1:2000, 
  Group = rep(c("SS", "TT", "MM", "SW", NA), each = 400), 
  Value = {set.seed(1); lapply(1:5, rnorm, n = 400, sd = 1)} %>% unlist()
)

g <- ggplot(data = d, aes(x = Group, y = Value)) + 
  geom_boxplot()
ggsave(g, filename = "g.png")

g.png

このように、

  • x軸がアルファベット順になっているためわかりにくい
  • NAの見栄えが悪い

という問題が生じる。この解決例。
もちろんデータフレームを整形してしまう方法もあるが、ここではプロット部分のコードで対応する方法を示す。

x軸に指定したカテゴリカルな値を平均値で並べ替える:forcats::fct_reorder

fct_reorder.png

Source: Cheatsheets - Posit (https://posit.co/resources/cheatsheets/)

参考:Reorder factor levels by sorting along another variable

各カテゴリ内の値を特定の関数で要約し、その値をもとにカテゴリを並べ替えて因子の水準とします。
要約関数はデフォルトではmedianなので、そのまま箱ひげ図の描画に使えます。

g_reorder <- ggplot(data = d, aes(x = fct_reorder(Group, Value), y = Value)) + 
  geom_boxplot()
ggsave(g_reorder, filename = "g_reorder.png")

g_reorder.png

x軸にNAが入っている場合の対処:forcats::fct_explicit_na

fct_explicit_na.png

Source: Cheatsheets - Posit (https://posit.co/resources/cheatsheets/)

参考:Make missing values explicit

NAを含んだ文字列をそのままas.factorしてもNAに該当する列には水準が与えられませんが、fct_explicit_naを使用するとNAに対して特定の水準を与えることができます。
これを利用するとNAに該当する部分を最後尾にしたまま水準名を明示的なものに変更できます。

g_explicit_na <- ggplot(data = d, aes(x = fct_explicit_na(Group, "UN"), y = Value)) + 
  geom_boxplot()
ggsave(g_explicit_na, filename = "g_explicit_na.png")

g_explicit_na.png

forcats1.0.0ではfct_explicit_naに代わってfct_na_value_to_levelの使用が推奨されているそうです。
参考:Convert between NA values and NA levels

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0