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
:table
:最も幅広い部分に対する最上部の幅price
:値段(USD)x
,y
,z
:それぞれ長さ・幅・高さ(mm)
geom_jitter( )で点をずらして描く
2次元の散布図を普通に描いても多くの点が重なってしまっていくつあるのか分からないので多少ずらして描いたもの。
diamondsデータをそのまま使うとサンプル数が多すぎるので少し間引いた。
geom_jitter( )では次のような引数を指定できる。
height
,width
:ランダムなズレの幅を方向別に指定shape
,size
:プロットマーカーの種類、大きさ(プロットマーカーや線の種類を変更する [R] - ねこすたっと)colour
,stroke
:マーカーの枠線の色、太さfill
,alpha
:マーカーを塗りつぶす色、透過度
※ プロットマーカーについては以前まとめた記事があります(2022-07-17 追加)
alpha
でマーカーの透過度を上げてやると、密なところの様子は少し見やすくなる。
diamonds %>% sample_n(size=10000) %>% ggplot(aes(x = cut, y = color)) + geom_jitter(height = 0.3, width = 0.3, alpha = 0.2, shape = 20, color = "darkcyan")
geom_count( )で各カテゴリーの合計数をプロットする
各カテゴリーの合計数を点の大きさで表してプロットするもの(バブルチャート)。
色やマーカーの種類などに関する引数(shape
, size
, colour
, stroke
, fill
, alpha
)についてはgeom_jitter( )を参照。
ggplot(data = diamonds, aes(x = cut, y = color)) + geom_count()
stat_sum( )との対応
カテゴリー変数をグラフにする場合は、だいたいカテゴリーごとに合計や割合として集計した値を使う。1次元の場合はstat_count()
で集計が行われ、これはgeom_bar()
というグラフの形状を決めるレイヤーと対応している。 2次元の場合はstat_sum()
が各セルごとに集計して、geom_point()
で点をプロットする。
次のコードは前述のgeom_count( )と同じグラフを作成する。
ggplot(data = diamonds, aes(x = cut, y = color)) + geom_point(stat="sum") ggplot(data = diamonds, aes(x = cut, y = color)) + stat_sum(geom = "point")
おわりに
- ggplotの使い手としてもう一歩成長するためにはstat_*( )の理解は必要不可欠
- 寒くなってネコが布団に入ってきてくれるようになりました
参考資料
- 本家ページ:
geom_*
とstat_*
の関係が詳しくまとめられています