ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

1つの連続変数と1つのカテゴリー変数をグラフにする(ggplot2パッケージ)[R]

ggplot2パッケージ(tidyverseパッケージに含まれている)のdiamondsデータを使う。

> library(tidyverse)
> head(diamonds)
# A tibble: 6 x 10
  carat cut       color clarity depth table price     x     y     z
  <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1  0.31 Good      E     SI1      63.3  55     544  4.33  4.36  2.75
2  0.8  Very Good H     VS2      59.1  59    2953  6.02  6.07  3.57
3  0.78 Very Good H     VS1      61.9  57.1  2854  5.87  5.95  3.66
4  0.3  Ideal     G     VVS2     61.5  57     684  4.29  4.33  2.65
5  1.5  Good      F     SI2      59.7  61    8181  7.39  7.44  4.43
6  1.2  Very Good E     SI2      61.4  58    6130  6.81  6.88  4.2 
  • carat:重さ(カラット)
  • cut:カットの質(5段階)
  • color:色(7段階)
  • clarity:透明度(8段階)
  • depth \frac{2z}{(x+y)}
  • table:最も幅広い部分に対する最上部の幅
  • price:値段(USD)
  • x, y, z:それぞれ長さ・幅・高さ(mm)

geom_boxplot( )を使って箱ヒゲ図を描く

xに離散変数(cut)、yに連続変数(carat)を指定するとカテゴリー別の箱ヒゲ図が横方向に並ぶ。
x, yを入れ替えると水平方向の箱ヒゲ図が縦方向に並ぶ。

ここでは箱の色もcut別に塗り分けるようにしたが、見た目華やかになる以外の意味はない(要因による塗り分けを指定する場合はaes()内に入れる書き方は知っておく方がよいかも)。

ggplot(data = diamonds, aes(x = cut, y = carat)) +
  geom_boxplot(varwidth=TRUE,
               notch=TRUE,
               notchwidth = 0.5,
               aes(fill = cut)) 

図1:箱ヒゲ図

箱の形状に関する指定

  • notch=TRUEとすると、箱の真ん中の線(通常はmedian)にノッチができる。
  • notchwidthで切れ込み具合を指定できる。例えばnotchwidth=0.2とすると箱の20%幅までノッチが入る。1より大きい値を指定すると箱の幅よりはみ出る。
  • varwidth=TRUEとすると、箱の幅をサンプルサイズの平方根に比例させる

箱の色・線種に関する指定

外れ値に関する指定

  • outlier.colour, outlier.stroke:プロットの線の色・太さ
  • outlier.fill, outlier.alpha:プロットの塗りつぶしの色、透過性
  • outlier.shape:プロットの形。=NAとするとプロットを描かない(見えなくしただけ)
  • outlier.size:プロットの大きさ

※ プロットマーカーについて以前まとめた記事があります(2022-07-17 追加)

necostat.hatenablog.jp

geom_violin( )でバイオリンプロットを描く

耳慣れないプロットだが、要は中心線の両側に密度プロットを描いたもの。

scaleでそれぞれのバイオリンの幅をどのように決めるか指定する。

"area":面積が同じ(デフォルト) "width":最大部分の幅が同じ "count":最大部分の幅がサンプルサイズに比例(少ないカテゴリーの分布はつぶれて分かりにくくなるかも)

また、draw_quantilesでパーセンタイルを示す線を追加できる。

ggplot(data = diamonds, aes(cut,carat)) +
  geom_violin(scale="area",
              draw_quantiles = c(0.25,0.5,0.75)) 

図2:バイオリンプロット

色・線種に関する指定については箱ヒゲ図を参照。

stat_*( )との対応

次にあげるような箱ヒゲ図を描く元となるデータはstat_boxplot()で計算される。

  • lower, middle, upper:箱の下端、中央線、上端
  • ymin, ymax:ヒゲの下端、上端

バイオリンプロットで使われる値はstat_ydensity()で計算される。

おわりに

  • 箱ヒゲ図で使われているymin, ymaxはリボンプロットやエラーバーを描くときにも出てくる
  • ネコ用品にはついつい財布の紐が緩みますね

参考資料

  • 本家ページ:

ggplot2.tidyverse.org

  • geom_*stat_*の関係が詳しくまとめられています

ggplot2のstat_*()関数についてのまとめ - Qiita