論理の流刑地

地獄の底を、爆笑しながら闊歩する

【小ネタ】geom_point()やgeom_line()で二つ以上の変数の組み合わせを用いてgroup化する方法

This is a note for 備忘

ggplot2のgeom_line()で折れ線グラフをかくときに、系列を二つの変数の組み合わせ(性別×年齢とか、学歴×人種とか)でとらえたい時がある。
このやり方を知らなくて、ずっと、二つの変数を組み合わせた新たな水準変数を作っていたが、それは不要だと今更気づいたという話だ。

stackoverflow.com

このQ&Aにあるように、引数のmappingの指定のなかで、group=interaction(var1, var2)を使えばよい。
仮想のデータdf1で、年代yearをX軸として、性別sexと人種raceの組み合わせを系列としてY軸に所得incomeをplotしたいときは、
以下のように書くのだ。

library(ggplot2)
pl1 <- ggplot(data = df1 , mapping=aes( x = year , y = income , group=interaction( sex , race) , colour = race , linetype= sex , shape = sex) + geom_line() + geom_point()
plot(pl1)

このinteraction(sex, race)の部分により、系列を2水準の組み合わせで定義している。
線の色だったり点の形だったりは、この系列単位でなく元の変数(sex, race)により定義できるのがウレシイところである。