狠狠撸

狠狠撸Share a Scribd company logo
R による作図入門
Introdunction to Data Visualization with R
NAKAJIMA Yukihiro
2018/1/16
Y.NAKAJIMA R による作図入門 2018/1/16 1 / 29
1 はじめに
2 ヒストグラムを描く
3 箱ひげ図を描く
4 散布図を描く
5 地図を書く(おまけ)
Y.NAKAJIMA R による作図入門 2018/1/16 2 / 29
はじめに
Y.NAKAJIMA R による作図入門 2018/1/16 3 / 29
今日の目標
データ分析をする際にはどのようなデータであるのかを把握するこ
とがとても重要です。
データを把握するための強力な手段として図として把握することが
挙げられます。
R の素晴らしい作図機能を身に着けることが今日の目標です。
Y.NAKAJIMA R による作図入門 2018/1/16 4 / 29
ggplot2
R にはもともと plot() がありますが、それよりもきれいに描けるの
が ggplot2 パッケージです。
R の神とも言われる Hadley Wickham 氏謹製
コンセプトは重ね書き
下地を用意し、どのデータをプロットするのかを決め、どのようにプ
ロットするのかを指定し、最後に体裁を整えるための設定をする。
どのデータをプロットするのかはどのようにプロットするのかと共に
設定することも可能
大事なことは Data Visualization with ggplot2 に書いてあります。
Hadley Wickham 著 ggplot2 は英語ですがオンラインで読むことがで
きます。
Y.NAKAJIMA R による作図入門 2018/1/16 5 / 29
plot と ggplot2 の比較
plot による作図
1 2 3 4 5 6 7
0.51.01.52.02.5
iris$Petal.Length
iris$Petal.Width
ggplot2 による作図
0.0
0.5
1.0
1.5
2.0
2.5
2 4 6
Petal.Length
Petal.Width
Y.NAKAJIMA R による作図入門 2018/1/16 6 / 29
ヒストグラムを描く
Y.NAKAJIMA R による作図入門 2018/1/16 7 / 29
geom_histgram
まず、ggplot() で白の下地を用意します。
そして、mapping=aes() でどのデータをプロットするのかを指定し、
データをどのようにプロットするのかを示す geom_histogram() を追加
することでヒストグラムを描画します。
library(ggplot2)
ggplot(data = iris,
mapping =
aes(x=Petal.Length)) +
geom_histogram()
0
10
20
2 4 6
Petal.Length
count
Y.NAKAJIMA R による作図入門 2018/1/16 8 / 29
重ね書きのイメージをつかむ 1
重ね書きのイメージをつかむために下地の設定から、プロットまで順を
追ってやってみましょう。まず下地を作ります。
なお、data や mapping,x,y は順番を変えなければ省略可能です。
p <- ggplot(iris,
aes(Petal.Length))
p
2 4 6
Petal.Length
Y.NAKAJIMA R による作図入門 2018/1/16 9 / 29
重ね書きのイメージをつかむ 2
次にヒストグラムを作成し、プロットします。
aes() の中の y=..density.. は後で使うので無視して大丈夫です。
p <- ggplot(iris,
aes(Petal.Length,
..density..))
p + geom_histogram()
0.0
0.2
0.4
0.6
0.8
2 4 6
Petal.Length
density
Y.NAKAJIMA R による作図入門 2018/1/16 10 / 29
重ね書きのイメージをつかむ 3
そして、geom_density() で密度曲線を追加します。alpha は密度曲線の
中の透明度です。 今回は 0 %を指定して透明にしています。
p <- ggplot(iris,
aes(Petal.Length,
..density..))
p <- p + geom_histogram()
p + geom_density(alpha = 0)
0.0
0.2
0.4
0.6
0.8
2 4 6
Petal.Length
density
Y.NAKAJIMA R による作図入門 2018/1/16 11 / 29
重ね書きのイメージをつかむ 4
論文に載せやすいように背景は白くしましょう。theme_classic() で背景
を白く、重要でない線はなくすなどできます。
p <- ggplot(iris,
aes(Petal.Length,
..density..))
p <- p + geom_histogram()
p <- p + geom_density(alpha = 0)
p + theme_classic()
0.0
0.2
0.4
0.6
0.8
2 4 6
Petal.Length
density
Y.NAKAJIMA R による作図入門 2018/1/16 12 / 29
重ね書きのイメージをつかむ 5
最後にタイトルをつけましょう。 ggtitle() で指定します。イメージがつ
かめたでしょうか。
p <- ggplot(iris,
aes(Petal.Length,
..density..))
p <- p + geom_histogram()
p <- p + geom_density(alpha = 0)
p <- p + theme_classic()
p + ggtitle(”histogram and density”) 0.0
0.2
0.4
0.6
0.8
2 4 6
Petal.Length
density
histogram and density
Y.NAKAJIMA R による作図入門 2018/1/16 13 / 29
カテゴリーごとにヒストグラムを描く
1 つの図の中にカテゴリーごとにヒストグラムを描いてみましょう
aes(fill= Category) とすることでカテゴリーごとにプロットすることがで
きます。
geom_histogram(position = ”identity”) とすると 1 つの図の中でカテゴ
リーごとにヒストグラムが描けます。
p <- ggplot(iris,
aes(Petal.Length,
..density..,
fill = Species,
colour = Species))
p <- p + geom_histogram(
position = ”identity”,
alpha = 0.5)
p + geom_density(alpha = 0.3)
0
1
2
2 4 6
Petal.Length
density
Species
setosa
versicolor
virginica
Y.NAKAJIMA R による作図入門 2018/1/16 14 / 29
別々の図にカテゴリーごとのヒストグラムを描いてみましょう。
facet_wrap(~Category) とすることで、別々の図にカテゴリーごとのヒス
トグラムを描くことができます。
p <- ggplot(iris,
aes(Petal.Length,
..density..,
fill = Species))
p <- p + geom_histogram()
p <- p + geom_density(alpha = 0.3)
p + facet_wrap(~Species,
scales = ”free”)
setosa versicolor virginica
1.00 1.25 1.50 1.75 3.0 3.5 4.0 4.5 5.0 5 6 7
0.0
0.5
1.0
1.5
0.0
0.5
1.0
1.5
2.0
0
2
4
6
8
Petal.Length
density
Species
setosa
versicolor
virginica
Y.NAKAJIMA R による作図入門 2018/1/16 15 / 29
箱ひげ図を描く
Y.NAKAJIMA R による作図入門 2018/1/16 16 / 29
geom_boxplot()
箱ひげ図を描くには、geom_boxplot() を使います。
ggplot(iris,
aes(Species,
Petal.Length,
fill = Species)) +
geom_boxplot() 2
4
6
setosa versicolor virginica
Species
Petal.Length
Species
setosa
versicolor
virginica
Y.NAKAJIMA R による作図入門 2018/1/16 17 / 29
箱ひげ図にどの程度データが分布しているかを確認するには
geom_jitter() を加えます。
ggplot(iris,
aes(Species,
Petal.Length,
fill = Species)) +
geom_boxplot() +
geom_jitter()
2
4
6
setosa versicolor virginica
Species
Petal.Length
Species
setosa
versicolor
virginica
Y.NAKAJIMA R による作図入門 2018/1/16 18 / 29
ヴァイオリンプロット
ヴァイオリンプロットを描画するには geom_violin() を使います。
geom_point() を使うことで、ヴァイオリンプロットの中にポイントを加
えられます。
ggplot(iris,
aes(Species,
Petal.Length,
fill = Species)) +
geom_violin() +
geom_point()
2
4
6
setosa versicolor virginica
Species
Petal.Length
Species
setosa
versicolor
virginica
Y.NAKAJIMA R による作図入門 2018/1/16 19 / 29
散布図を描く
Y.NAKAJIMA R による作図入門 2018/1/16 20 / 29
geom_point()
geom_point() を使うと点で描画します。aes() で x と y を指定すると散布
図となります。
ggplot(iris,
aes(Petal.Length,
Petal.Width)) +
geom_point()
0.0
0.5
1.0
1.5
2.0
2.5
2 4 6
Petal.Length
Petal.Width
Y.NAKAJIMA R による作図入門 2018/1/16 21 / 29
散布図でカテゴリーごとに塗り分ける
カテゴリーごとに色を塗り分けるには aes(colour=Category) とします。
ggplot(iris,
aes(Petal.Length,
Petal.Width,
colour = Species)) +
geom_point()
0.0
0.5
1.0
1.5
2.0
2.5
2 4 6
Petal.Length
Petal.Width
Species
setosa
versicolor
virginica
Y.NAKAJIMA R による作図入門 2018/1/16 22 / 29
散布図に回帰直線を追加する
回帰直線を追加するためには geom_smooth(method=”lm”) を書き加え
ます。
ggplot(iris,
aes(Petal.Length,
Petal.Width)) +
geom_point() +
geom_smooth(method = ”lm”)
0
1
2
2 4 6
Petal.Length
Petal.Width
Y.NAKAJIMA R による作図入門 2018/1/16 23 / 29
信頼区間を表示しないために se=FALSE とします。
ggplot(iris,
aes(Petal.Length,
Petal.Width)) +
geom_point() +
geom_smooth(method = ”lm”,
se = FALSE)
0.0
0.5
1.0
1.5
2.0
2.5
2 4 6
Petal.Length
Petal.Width
Y.NAKAJIMA R による作図入門 2018/1/16 24 / 29
散布図に近似曲線を追加する
近似を追加するためには geom_smooth() とします。
ggplot(iris,
aes(Petal.Length,
Petal.Width)) +
geom_point() +
geom_smooth()
0.0
0.5
1.0
1.5
2.0
2.5
2 4 6
Petal.Length
Petal.Width
Y.NAKAJIMA R による作図入門 2018/1/16 25 / 29
カテゴリーごとに回帰直線を引くためには、aes(colour=Category) とし
ます。
カテゴリーごとにすると回帰直線がデータがある部分にしか引かれない
ので、図いっぱい引くためには、geom_smooth(fullrange=TRUE) と加
えます。
ggplot(iris,
aes(Petal.Length,
Petal.Width,
colour = Species,
fill = Species)) +
geom_point() +
geom_smooth(method = ”lm”,
fullrange = TRUE) 0.0
0.5
1.0
1.5
2.0
2.5
2 4 6
Petal.Length
Petal.Width
Species
setosa
versicolor
virginica
Y.NAKAJIMA R による作図入門 2018/1/16 26 / 29
地図を書く(おまけ)
Y.NAKAJIMA R による作図入門 2018/1/16 27 / 29
ggplot2 で地図を描くこともできます。
sf パッケージでファイルを読み込み (sf の説明は割愛します。)、地図に表
示したいデータを aes(fill=variable) で指定します。
なおこのコードを実行するには sf パッケージ、spData パッケージをイン
ストールする必要があります。
nc <- sf::st_read(
system.file(”shapes/sids.shp”,
package = ”spData”)[1])
ggplot(nc) +
geom_sf(aes(fill = BIR74))
34.0
34.5
35.0
35.5
36.0
36.5
?84 ?82 ?80 ?78 ?76
5000
10000
15000
20000
BIR74
Y.NAKAJIMA R による作図入門 2018/1/16 28 / 29
Enjoy!
Y.NAKAJIMA R による作図入門 2018/1/16 29 / 29

More Related Content

Rによる作図入門 Introduction to Data Visualization with R