注意書き
当該記事には「Rではじめるデータサイエンス」のネタバレを多数含みます。
自分で回答することが一番の力になりますのでなるべく自力で回答するようよろしくお願いいたします。
1. 折れ線グラフを描くにはどのgeomを使うか。箱ヒゲ図では? ヒストグラムでは? 面グラフでは?
折れ線グラフ
ggplot( data = mpg, mapping = aes(x = displ, y = hwy) ) + geom_line()
折れ線グラフでは
geom_line()
を使います。
箱ヒゲ図
ggplot( data = mpg, mapping = aes(x = displ, y = hwy) ) + geom_boxplot( mapping = aes(group = displ) )
と排気量ごとに分けた箱ヒゲ図はこのような形になります。
箱ヒゲ図では
geom_boxplot()
を使います。
ヒストグラム
ggplot( data = mpg, mapping = aes(x = displ) ) + geom_histogram(bins = 30)
geom_histgram
を使います。aesthetic属性のxに列を指定するとこのような表記となります。
ではyに列を指定するとどうなるか。
ggplot( data = mpg, mapping = aes(y = hwy) ) + geom_histogram(bins = 30)
とこのようにy軸から伸びるグラフになります。
面グラフでは?
ggplot( data = mpg, mapping = aes( x = displ, y = hwy ) ) + geom_area()
面グラフ(Area Chart)は
geom_area()
で表示します。
あんまり綺麗に作れなかったので、綺麗な作例はArea chart with R and ggplot2 – the R Graph Galleryを参照してください。
2. 次のコードを頭の中で実行して出力がどうなるか予想しなさい。それからRで実行して予測が正しかったかチェックしなさい。
ggplot( data = mpg, mapping = aes(x = displ, y = hwy, color = drv) ) + geom_point() + geom_smooth(se = FALSE)
これは素直にインタプリターの気持ちになって頭から読んでいきましょう。
まず、最初のggplotではmpgというデータフレームから横軸にdipl、縦軸にhwdとするdrvで色分けでした座標空間を作ります。
次のgeom_point()では、読み込んだ座標空間に各drvで色分けされた散布図を作ります。
そして最後のgeom_smoothで各drv別の回帰直線を散布図に重ねます。
3. show.legend = FALSEは何をしているのか。取り除いたら何が起こるのか。私がこれを使ったのはなぜか。
グラフの凡例を表示しなくなります。取り除くと凡例を表示します。
「私がこれを使ったのはなぜか。」については本文中でshow.legend = FALSEを使ったのは16Pの
ggplot(data = mpg) + geom_smooth( mapping = aes(x = displ, y = hwy, color = drv), show.legend = FALSE )
のグラフだけなので、そのグラフのことだけを考えればいいのでしょうか?
設問がはっきりしないのでよくわかりませんが、他の二つのグラフでは凡例がないので、それにあわせて表示しないことを選んだのだと思います。
4. geom_smooth()のse引数は何をしているのか。
Display confidence interval around smooth? (TRUE by default, see level to control.)
5. 次の二つのグラフは同じかどうか。その理由は何か。
ggplot( data = mpg, mapping = aes(x = displ, y = hwy) ) + geom_point() + geom_smooth()
と
ggplot() + geom_point( data = mpg, mapping = aes(x = displ, y = hwy) ) + geom_smooth( data = mpg, mapping = aes(x = displ, y = hwy) )
ということで、この二つは全く同じグラフです。
# 6. 次のグラフを生成するコードを作りなさい
base = ggplot( data = mpg, mapping = aes(x = displ, y = hwy) )
大元のコードとしてこれを宣言しておきます。
これに表示スタイル等を考えて足していきます。
1
base + geom_point() + geom_smooth( formula = y ~ x, se = FALSE )
特にこれは難しくないと思います。
散布図のレイヤーを使って、その上に回帰直線を乗せるだけ。
2
base + geom_point() + geom_smooth( mapping = aes(group = drv), formula = y ~ x, se = FALSE )
最初の図表から回帰直線を各駆動系ごとに書き直すにはどうしたらいいかを考えます。
なのでgeom_smooth()のところにaesthetic属性にgroup = drvを追加します。
3
base + geom_point( mapping = aes(colour = drv) ) + geom_smooth( mapping = aes(group = drv), formula = y ~ x, se = FALSE )
散布図もまたdrvで分けましょうということで散布図にも同様にaesthetic属性にcolour = drvを追加して色分けを行います。
4
base + geom_point( mapping = aes(colour = drv) ) + geom_smooth( formula = y ~ x, se = FALSE )
点の色は分かれますが、回帰直線は全体で1本のグラフです。
5
base + geom_point( mapping = aes(colour = drv) ) + geom_smooth( mapping = aes(linetype = drv), formula = y ~ x, se = FALSE )
属性ごとに線の種類が変わります。
aesthetic属性のlinetypeで指定します。
6
base + geom_point( size = 4, colour = "white" ) + geom_point( mapping = aes(colour= drv) )
最後はなかなか難しい課題です。
以前に登場したstrokeではうまくいきません。
なので一旦全体を白の点で散布図を描いたのち、駆動系別に塗り分けた散布図のレイヤーを重ねるという手法を取っています。
なかなか自力では思い浮かばなかったので、
3 Data visualisation | R for Data Science: Exercise Solutions
の解答方法を参考にしました。
よく思い浮かんだなぁ。