ggplot2再入門
2015/09/24 Rと統計の勉強会
@yutannihilation
1
対象
2
こんな人を想定しています
• ggplot2を多少さわったことはある
• なんとなくグラフは描けるけど、ggplot2のコー
ドの意味はあまり理解できない
• 人が描いたggplot2のグラフを少しいじりたいけ
ど、どのコードを変えればイメージ...
ggplot2とは
4
ggplot2
• なんかいい感じのグラフが簡単に描ける
• R界のスター・Hadley Wickham作
5
いい感じのグラフとは
6
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy)) +
geom_point()
ggplot2のコードとグラフ
7
グラフに描く対象のデータ
データの要素とグラフの軸との対応
グラフの種...
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy,
colour = class)) +
geom_point()
カテゴリごとに色を変えたい
8
グラフに描く対象のデータ
データの要素とグ...
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy,
colour = class)) +
geom_point() +
geom_smooth(alpha = 0.1)
グラフを重ねたい
9...
何がいい感じなのか
グラフの要素がいい感じに分割されている。レゴブ
ロック的な。
• 設定を組み替えたり変えたりしやすい
→ 探索的なデータ分析に便利
→ 複雑なグラフを描くときも見通しが立つ
• でもレゴと同じく踏むと痛いこともある…。独特!...
グラフの要素とは
11
Grammar of Graphics
• Data + mappings
• Layers (geoms, stats)
• Scale
• Coord
• Facet
• Theme
12
ggplot2
data
Data
13
グラフに描く対象のデータ
• データはdata.frameに決まっている
• fortify()とかautoplot()とかいう、様々な
形式のデータをdata.frameに変換してくれる便
利関数もある
• ggfortifyというパッケージ...
data.frame
• 長さのそろった値のリスト
• 列には名前と型(数値、文字など)がある
15
head(mpg)
#> manufacturer model displ year cyl trans drv cty hwy fl cla...
値のリスト → data.frame
• data.frame()という関数でつくる
• 引数は「列名=配列」の形式
16
data.frame(
x = 1:10,
y = 2^(1:10),
z = paste("day", 1:10)
)...
CSV → data.frame
• read.csv()で読み込む
17
read.csv("ファイル名", stringsAsFactors = FALSE)
#> x y z
#> 1 1 2 day 1
#> 2 2 4 day 2
#...
aes
Aesthetic Mappings
18
aes:データとグラフの対応
• 「列1の値をX軸に、列2の値をY軸にとる」と
いうようなマッピング
• X軸、Y軸だけでなく、色やサイズなどにも対応
付けることができる
• 列名だけでなく「..count..」(データの個数
を表す)のような...
aesのイメージ
20
#> manufacturer model displ year cyl trans drv cty hwy fl class
#> 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p com...
aesのパラメータの例
変数名 意味
x X軸
y Y軸
colour/color 線や点の色
fill 塗りの色
alpha 透明度
size 点のサイズ
21
Hadleyはイギリス英語至上主義!
aesの指定の仕方
22
ggplot(data = mpg,
mapping = aes_string(x = "displ",
y = "hwy",
colour = "class",
alpha = "cty")) +
...
ggplo...
aesの指定の仕方:省略
• 「変数名=列名」のペアで指定
• x、yは省略できる
• それ以外を指定するときは省略不可
23
ggplot(data = mpg,
mapping = aes(displ,
hwy,
colour = clas...
aesの指定の仕方:省略
• ついでにいうと、dataとかmappingも省略可
• この書き方が一般的なので慣れましょう
24
ggplot(mpg,
aes(displ,
hwy,
colour = class,
alpha = cty))...
aesの指定の仕方:計算
• 簡単な計算ならaesに指定できる
• 速度は出ないので、複雑な計算は事前にやるべき
25
ggplot(mpg,
aes(log(displ) / 10,
hwy,
colour = ifelse(manufact...
aesの指定の仕方:定数
• 色や透過度などに決まった値を指定したい場合は、
aesの外側で指定する
26
ggplot(mpg,
aes(displ, hwy),
colour = "red",
alpha = 0.3) +
...
参考:カテゴリ分け
• group:これを明示的に指定するのが正しい
• colour・fill:カテゴリの意味を兼ねることが多い
• グラフの種類によっていろいろ。例:箱ひげ図はx
• グリッド状に分けるのはfacet(後述)
27
geom
Geometric Objects
28
geom:グラフの種類
• 棒グラフとか散布図とかそういうやつ
• 「geom_XXXX()」という名前
29
geomの例
geom 描けるグラフ
geom_point 散布図、バブルチャート
geom_line 折れ線グラフ
geom_bar 棒グラフ
geom_histogram ヒストグラム
geom_boxplot 箱ひげ図
geom_dens...
geomの指定の仕方
• レイヤーを重ねるには+
31
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
geom_line()
geomの指定の仕方:aes
• 別のaesを使いたいときは
それぞれに指定する
32
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class,
size = cyl)) +
g...
geomの指定の仕方:data
• 別のデータを重ねたいときは
data引数に指定する
33
d <- data.frame(displ = rep(1:5, 5),
hwy = rep(1:5 * 10, each = 5),
cyl = r...
stat
Statistical Transformation
34
stat:データの変形・集計
• そのままの値か平均か合計かとかそういうやつ
• 「stat_XXXX()」とかいう名前
• 各geom_()にはデフォルトのstatがあるので、
普段はあまり意識することはない
• でも知っておくと便利
35
statの例
stat 計算
stat_identity そのままの値
stat_bin 各区間の合計・密度など
stat_boxplot 箱ひげ図用(四分位数)
stat_contour コンター図用
stat_smooth 近似曲線用
st...
参考:statとgeomの関係
• 各geom_()にはデフォルトのstatがある
• 各stat_()にはデフォルトのgeomがある
• そもそもグラフの種類とデータの変形は表裏一体
37
実はどちらも、
layer(geom = "XXX"...
参考:statとgeomの関係
• 作者の「わかりにくくてごめん!」という懺悔:
Unfortunately, due to any early design
mistake I called these either stat_() or
g...
statの指定の仕方
• 指定なしデフォルトのstat
• stat引数に指定する
• stat_()関数を使う
39
ggplot(movies, aes(x = rating)) +
stat_bin()
ggplot(movies, a...
statの指定の仕方
• 指定なしデフォルトのstat
• stat引数に指定する
• stat_()関数を使う
40
ggplot(movies, aes(x = rating)) +
stat_bin()
ggplot(movies, a...
参考:Generated Variables
• statで計算された値をマッピングに使える
• 「..変数名..」のように書く
41
ggplot(diamonds, aes(price)) +
geom_histogram(aes(y = ...
例:geom_histogramの
generated variables
1. そのgeomのデフォルトのstatをヘルプで見る
2. statのヘルプでValueの項目を見る
42
?geom_histogram
?stat_bin
bin...
• count  ヒストグラム
• density  確率密度関数
• ncount、ndensity  それを正規化したもの
43
..count.. ..density.. ..ncount.. ..ndensity..
例:geom...
position
Position Adjustments
44
position:各要素の位置
• 重ね合わせか、積み上げか、並列配置か、とかそ
ういうやつ
• 「position_XXXX()」という名前
45
positionの例
46
position 位置
position_identity 重ね合わせ
position_stack 積み上げ
position_fill 100%積み上げ
position_dodge 横に並べる
position...
positionの指定の仕方
• 指定しない デフォルトのposition
• 名前を指定する
• positionオブジェクトを指定する
47
p <- ggplot(mtcars, aes(x=factor(cyl), fill=fact...
facet
Facetting
48
facet:データの分割
• ある分類でデータをサブセットに分け、サブセッ
トごとにグラフを描く
• 「facet_XXXX()」という名前
49
facetの例
50
facet 分割の仕方
facet_null 分割しない(デフォルト)
facet_wrap 分割したものを順に並べる
facet_grid 格子状に分割する
facetの指定の仕方:
facet_wrap
• 「~ 分割に使う変数」で分割
• 行や列の数を指定できる
51
p <- ggplot(mpg, aes(displ, hwy)) +
geom_point()
p + facet_wrap(...
facetの指定の仕方:
facet_grid
• 「Y方向の変数~X方向の変数」
• 「.」だとその方向は分割されない
52
p <- ggplot(mpg, aes(displ, hwy)) +
geom_point()
p + facet...
scale
Scale
53
scale:値のスケール
• X軸・Y軸は対数軸か、どの値にどの色を割り当
てるか、とかそういうやつ
• 目盛りの刻み、ラベルなども設定する
• 連続値か離散値かによって指定が異なる
• 「scale_変数名_XXXX()」という名前
54
scaleの種類の例
55
scale スケール
scale_x_XXXX X軸
scale_y_XXXX Y軸
scale_colour_XXXX 線の色
scale_fill_XXXX 塗りの色
scale_shape_XXXX 点の形
s...
scaleの変形の例
56
scale スケール
scale_x_continuous X軸の値そのまま(連続値)
scale_x_log10 X軸の対数スケール(連続値)
scale_x_datetime X軸の時間スケール(連続値)
sca...
scaleのパラメータ例
57
パラメータ名 意味
breaks 目盛りをつける位置
labels 目盛りのラベル
limits 軸の範囲
trans 軸の変形(対数軸、自然対数軸、
logitなど)
scaleの指定の仕方:X軸・Y軸
• そのまま
• X軸を対数軸に
• X軸もY軸も対数軸に
58
d <- as.data.frame(expand.grid(x = 1:30, y = 1:30))
p <- ggplot(d, aes(...
scaleの指定の仕方:X軸・Y軸
• 値の範囲を指定
• 目盛りの位置を指定
• 目盛りにラベルをつける
59
p + scale_x_continuous(limits = c(10, 20))
# xlim(10, 20)とも書ける
p ...
scaleの指定の仕方:色
• 連続値の場合はグラデーションになる
• 離散値の場合は適当な色が割り振られる
60
p <- ggplot(d, aes(x, y))
p + geom_point(aes(colour = x * y), si...
scaleの指定の仕方:色
• いろいろ引数をいじっていい感じの色を探す。
61
p2 <- p + geom_point(aes(colour = factor((x * y) %% 4)), size = 5)
p2 + scale_col...
coord
Coordinate System
62
coord:座標系の設定
• X軸とY軸を同じ縮尺にするか、どの測地系を使
うか、X軸とY軸をひっくり返すか、とか。
• 「coord_XXXX()」という名前
63
coordの例
64
coord 座標系
coord_cartesian ただの直交座標系
coord_fixed X/Yの比率が固定された座標系
coord_flip X軸とY軸を入れ替えた座標系
coord_polar 円グラフのための座標...
参考:scaleとcoordの関係
• scaleは、実際に値を変形する
• coordは、眺め方を変える(値は変わらない)
※個人的なイメージです
65
参考:scaleとcoordの関係
66
p + coord_cartesian(xlim = c(1, 25))
d <- data.frame(x=1:50, y=c(1:25, 25:1))
p <- ggplot(d, aes(x, y...
coordの指定の仕方
• そのまま
• X軸とY軸を入れ替える
• 軸の比率を1:1に
67
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p
p + coord_flip()
p + co...
まとめ
68
ggplot2の要素
• data:データ
• aes:マッピング
• geom/stat:グラフの種類
• position:要素の位置
• facet:分割
• scale:スケールの変形
• coord:座標軸
69
グラフを描くのに必要...
※今回説明していないこと
• スタイルの設定(フォントの設定、ラベルのつけ
方、テーマの共有など)
• 画像に保存する方法(ggsave)
• ggplot2とあわせて使うと便利なパッケージ
(例:GGally, gridExtra, dire...
分からないときは
71
公式ドキュメント
72(http://docs.ggplot2.org/current/)
公式チートシート
73(https://www.rstudio.com/wp-content/uploads/2015/08/ggplot2-
ggplot2 book(発売が待ち遠しい…)
74(https://github.com/hadley/ggplot2-book/)
ggplot2逆引き
75(https://yutannihilation.github.io/ggplot2-gyakubiki/)
r-wakalang
(Rについて気軽に質問できるチャット。オススメ!)
76(詳しくは、http://www.slideshare.net/teramonagi/ss-52463319)
77
Enjoy!
Upcoming SlideShare
Loading in...5
×

ggplot2再入門

871

Published on

ggplot2の紹介です。入門はもう飽きた!くらいのひとを対象に、少し細かい話にも触れています。

Published in: Data & Analytics

ggplot2再入門

  1. 1. ggplot2再入門 2015/09/24 Rと統計の勉強会 @yutannihilation 1
  2. 2. 対象 2
  3. 3. こんな人を想定しています • ggplot2を多少さわったことはある • なんとなくグラフは描けるけど、ggplot2のコー ドの意味はあまり理解できない • 人が描いたggplot2のグラフを少しいじりたいけ ど、どのコードを変えればイメージ通りになるか わからない 3
  4. 4. ggplot2とは 4
  5. 5. ggplot2 • なんかいい感じのグラフが簡単に描ける • R界のスター・Hadley Wickham作 5
  6. 6. いい感じのグラフとは 6
  7. 7. ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + geom_point() ggplot2のコードとグラフ 7 グラフに描く対象のデータ データの要素とグラフの軸との対応 グラフの種類 要素を組み合わせたり 積み重ねたりするイメージ
  8. 8. ggplot(data = mpg, mapping = aes(x = displ, y = hwy, colour = class)) + geom_point() カテゴリごとに色を変えたい 8 グラフに描く対象のデータ データの要素とグラフの軸との対応 グラフの種類 色との対応
  9. 9. ggplot(data = mpg, mapping = aes(x = displ, y = hwy, colour = class)) + geom_point() + geom_smooth(alpha = 0.1) グラフを重ねたい 9 グラフに描く対象のデータ データの要素とグラフの軸との対応 グラフの種類 色との対応 グラフの種類2
  10. 10. 何がいい感じなのか グラフの要素がいい感じに分割されている。レゴブ ロック的な。 • 設定を組み替えたり変えたりしやすい → 探索的なデータ分析に便利 → 複雑なグラフを描くときも見通しが立つ • でもレゴと同じく踏むと痛いこともある…。独特! 10
  11. 11. グラフの要素とは 11
  12. 12. Grammar of Graphics • Data + mappings • Layers (geoms, stats) • Scale • Coord • Facet • Theme 12 ggplot2
  13. 13. data Data 13
  14. 14. グラフに描く対象のデータ • データはdata.frameに決まっている • fortify()とかautoplot()とかいう、様々な 形式のデータをdata.frameに変換してくれる便 利関数もある • ggfortifyというパッケージが便利 14
  15. 15. data.frame • 長さのそろった値のリスト • 列には名前と型(数値、文字など)がある 15 head(mpg) #> manufacturer model displ year cyl trans drv cty hwy fl class #> 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact #> 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact #> 3 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact #> 4 audi a4 2.0 2008 4 auto(av) f 21 30 p compact #> 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact #> 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact
  16. 16. 値のリスト → data.frame • data.frame()という関数でつくる • 引数は「列名=配列」の形式 16 data.frame( x = 1:10, y = 2^(1:10), z = paste("day", 1:10) ) #> x y z #> 1 1 2 day 1 #> 2 2 4 day 2 #> 3 3 8 day 3 ...
  17. 17. CSV → data.frame • read.csv()で読み込む 17 read.csv("ファイル名", stringsAsFactors = FALSE) #> x y z #> 1 1 2 day 1 #> 2 2 4 day 2 #> 3 3 8 day 3 ... これはおまじないみたいなものだ と思ってとりあえず気にしない!
  18. 18. aes Aesthetic Mappings 18
  19. 19. aes:データとグラフの対応 • 「列1の値をX軸に、列2の値をY軸にとる」と いうようなマッピング • X軸、Y軸だけでなく、色やサイズなどにも対応 付けることができる • 列名だけでなく「..count..」(データの個数 を表す)のような隠し変数?も使える • 値の種類(連続値・離散値)によってマッピング が制限される場合もある 19
  20. 20. aesのイメージ 20 #> manufacturer model displ year cyl trans drv cty hwy fl class #> 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact #> 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact #> 3 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact #> 4 audi a4 2.0 2008 4 auto(av) f 21 30 p compact #> 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact #> 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact x y colour x y colour 1 1.8 29 colour1 2 1.8 29 colour1 3 2.0 31 colour1 4 2.0 30 colour1 5 2.8 26 colour1 6 2.8 26 colour1 新しいデータセット を生成
  21. 21. aesのパラメータの例 変数名 意味 x X軸 y Y軸 colour/color 線や点の色 fill 塗りの色 alpha 透明度 size 点のサイズ 21 Hadleyはイギリス英語至上主義!
  22. 22. aesの指定の仕方 22 ggplot(data = mpg, mapping = aes_string(x = "displ", y = "hwy", colour = "class", alpha = "cty")) + ... ggplot(data = mpg, mapping = aes(x = displ, y = hwy, colour = class, alpha = cty)) + ... ""が要らないパターン (NSE) ""が要るパターン (SE) こっちが一般的 気になる人は 「non-standard evaluation」 で検索!
  23. 23. aesの指定の仕方:省略 • 「変数名=列名」のペアで指定 • x、yは省略できる • それ以外を指定するときは省略不可 23 ggplot(data = mpg, mapping = aes(displ, hwy, colour = class, alpha = cty)) + ...
  24. 24. aesの指定の仕方:省略 • ついでにいうと、dataとかmappingも省略可 • この書き方が一般的なので慣れましょう 24 ggplot(mpg, aes(displ, hwy, colour = class, alpha = cty)) + ...
  25. 25. aesの指定の仕方:計算 • 簡単な計算ならaesに指定できる • 速度は出ないので、複雑な計算は事前にやるべき 25 ggplot(mpg, aes(log(displ) / 10, hwy, colour = ifelse(manufacturer == "audi", TRUE, FALSE), alpha = cty)) + ...
  26. 26. aesの指定の仕方:定数 • 色や透過度などに決まった値を指定したい場合は、 aesの外側で指定する 26 ggplot(mpg, aes(displ, hwy), colour = "red", alpha = 0.3) + ...
  27. 27. 参考:カテゴリ分け • group:これを明示的に指定するのが正しい • colour・fill:カテゴリの意味を兼ねることが多い • グラフの種類によっていろいろ。例:箱ひげ図はx • グリッド状に分けるのはfacet(後述) 27
  28. 28. geom Geometric Objects 28
  29. 29. geom:グラフの種類 • 棒グラフとか散布図とかそういうやつ • 「geom_XXXX()」という名前 29
  30. 30. geomの例 geom 描けるグラフ geom_point 散布図、バブルチャート geom_line 折れ線グラフ geom_bar 棒グラフ geom_histogram ヒストグラム geom_boxplot 箱ひげ図 geom_density 確率密度関数 geom_text テキスト 30
  31. 31. geomの指定の仕方 • レイヤーを重ねるには+ 31 ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_line()
  32. 32. geomの指定の仕方:aes • 別のaesを使いたいときは それぞれに指定する 32 ggplot(mpg, aes(displ, hwy)) + geom_point(aes(colour = class, size = cyl)) + geom_line(aes(linetype = drv)) x と y のマッピングは共通 色やサイズなどは別々の マッピング
  33. 33. geomの指定の仕方:data • 別のデータを重ねたいときは data引数に指定する 33 d <- data.frame(displ = rep(1:5, 5), hwy = rep(1:5 * 10, each = 5), cyl = rep(1:5, 5)) ggplot(mpg, aes(displ, hwy, colour = factor(cyl))) + geom_point(size = 4) + geom_line(data = d) マッピングは共通で、データだけ別
  34. 34. stat Statistical Transformation 34
  35. 35. stat:データの変形・集計 • そのままの値か平均か合計かとかそういうやつ • 「stat_XXXX()」とかいう名前 • 各geom_()にはデフォルトのstatがあるので、 普段はあまり意識することはない • でも知っておくと便利 35
  36. 36. statの例 stat 計算 stat_identity そのままの値 stat_bin 各区間の合計・密度など stat_boxplot 箱ひげ図用(四分位数) stat_contour コンター図用 stat_smooth 近似曲線用 stat_ellipse 信頼楕円を計算する stat_summary データを要約する stat_function 自分で関数を指定する 36 汎用 特定の geom用 対応する geomなし
  37. 37. 参考:statとgeomの関係 • 各geom_()にはデフォルトのstatがある • 各stat_()にはデフォルトのgeomがある • そもそもグラフの種類とデータの変形は表裏一体 37 実はどちらも、 layer(geom = "XXX", stat = "YYY", ...) という関数のショートカット!
  38. 38. 参考:statとgeomの関係 • 作者の「わかりにくくてごめん!」という懺悔: Unfortunately, due to any early design mistake I called these either stat_() or geom_(). A better decision would have been to call them layer_() functions: that's a more accurate description because every layer involves a a stat and a geom. (出典:https://github.com/hadley/ggplot2/blob/master/vignettes/extending- ggplot2.Rmd) 38
  39. 39. statの指定の仕方 • 指定なしデフォルトのstat • stat引数に指定する • stat_()関数を使う 39 ggplot(movies, aes(x = rating)) + stat_bin() ggplot(movies, aes(x = rating)) + geom_bar() ggplot(movies, aes(x = rating)) + geom_bar(stat = "bin") どれも同じ (ヒストグラム)
  40. 40. statの指定の仕方 • 指定なしデフォルトのstat • stat引数に指定する • stat_()関数を使う 40 ggplot(movies, aes(x = rating)) + stat_bin() ggplot(movies, aes(x = rating)) + geom_bar() ggplot(movies, aes(x = rating)) + geom_bar(stat = "bin") こっちがオススメ
  41. 41. 参考:Generated Variables • statで計算された値をマッピングに使える • 「..変数名..」のように書く 41 ggplot(diamonds, aes(price)) + geom_histogram(aes(y = ..density..), binwidth = 500)
  42. 42. 例:geom_histogramの generated variables 1. そのgeomのデフォルトのstatをヘルプで見る 2. statのヘルプでValueの項目を見る 42 ?geom_histogram ?stat_bin bin なので stat_bin が デフォルト この4つの変数が 使える
  43. 43. • count  ヒストグラム • density  確率密度関数 • ncount、ndensity  それを正規化したもの 43 ..count.. ..density.. ..ncount.. ..ndensity.. 例:geom_histogramの generated variables
  44. 44. position Position Adjustments 44
  45. 45. position:各要素の位置 • 重ね合わせか、積み上げか、並列配置か、とかそ ういうやつ • 「position_XXXX()」という名前 45
  46. 46. positionの例 46 position 位置 position_identity 重ね合わせ position_stack 積み上げ position_fill 100%積み上げ position_dodge 横に並べる position_jitter 少しづつずらす position_nudge 決まった間隔にずらす
  47. 47. positionの指定の仕方 • 指定しない デフォルトのposition • 名前を指定する • positionオブジェクトを指定する 47 p <- ggplot(mtcars, aes(x=factor(cyl), fill=factor(vs))) p + geom_bar() #geom_barのデフォルトは"stack" p + geom_bar(position = "dodge") p + geom_bar(position = position_dodge(width = 0.5), alpha = 0.6)
  48. 48. facet Facetting 48
  49. 49. facet:データの分割 • ある分類でデータをサブセットに分け、サブセッ トごとにグラフを描く • 「facet_XXXX()」という名前 49
  50. 50. facetの例 50 facet 分割の仕方 facet_null 分割しない(デフォルト) facet_wrap 分割したものを順に並べる facet_grid 格子状に分割する
  51. 51. facetの指定の仕方: facet_wrap • 「~ 分割に使う変数」で分割 • 行や列の数を指定できる 51 p <- ggplot(mpg, aes(displ, hwy)) + geom_point() p + facet_wrap(~cyl) p + facet_wrap(~cyl, ncol = 3)
  52. 52. facetの指定の仕方: facet_grid • 「Y方向の変数~X方向の変数」 • 「.」だとその方向は分割されない 52 p <- ggplot(mpg, aes(displ, hwy)) + geom_point() p + facet_grid(.~cyl) p + facet_grid(year~cyl)
  53. 53. scale Scale 53
  54. 54. scale:値のスケール • X軸・Y軸は対数軸か、どの値にどの色を割り当 てるか、とかそういうやつ • 目盛りの刻み、ラベルなども設定する • 連続値か離散値かによって指定が異なる • 「scale_変数名_XXXX()」という名前 54
  55. 55. scaleの種類の例 55 scale スケール scale_x_XXXX X軸 scale_y_XXXX Y軸 scale_colour_XXXX 線の色 scale_fill_XXXX 塗りの色 scale_shape_XXXX 点の形 scale_linetype_XXXX 線の形 scale_alpha_XXXX 透明度
  56. 56. scaleの変形の例 56 scale スケール scale_x_continuous X軸の値そのまま(連続値) scale_x_log10 X軸の対数スケール(連続値) scale_x_datetime X軸の時間スケール(連続値) scale_x_discrete X軸の値そのまま(離散値) scale_colour_gradient 一色のグラデーション(連続値) scale_colour_gradient2 二色のグラデーション(連続値) scale_colour_brewer いい感じの色分け(離散値) scale_colour_manual 手動でがんばる色分け(離散値)
  57. 57. scaleのパラメータ例 57 パラメータ名 意味 breaks 目盛りをつける位置 labels 目盛りのラベル limits 軸の範囲 trans 軸の変形(対数軸、自然対数軸、 logitなど)
  58. 58. scaleの指定の仕方:X軸・Y軸 • そのまま • X軸を対数軸に • X軸もY軸も対数軸に 58 d <- as.data.frame(expand.grid(x = 1:30, y = 1:30)) p <- ggplot(d, aes(x, y)) + geom_point() p p + scale_x_log10() p + scale_x_log10() + scale_y_log10()
  59. 59. scaleの指定の仕方:X軸・Y軸 • 値の範囲を指定 • 目盛りの位置を指定 • 目盛りにラベルをつける 59 p + scale_x_continuous(limits = c(10, 20)) # xlim(10, 20)とも書ける p + scale_x_continuous(breaks = c(12, 19)) p + scale_x_continuous(breaks = c(12, 19), labels = c("12th", "19th"))
  60. 60. scaleの指定の仕方:色 • 連続値の場合はグラデーションになる • 離散値の場合は適当な色が割り振られる 60 p <- ggplot(d, aes(x, y)) p + geom_point(aes(colour = x * y), size = 5) p + geom_point(aes(colour = factor((x * y) %% 4)), size = 5)
  61. 61. scaleの指定の仕方:色 • いろいろ引数をいじっていい感じの色を探す。 61 p2 <- p + geom_point(aes(colour = factor((x * y) %% 4)), size = 5) p2 + scale_colour_brewer() p2 + scale_colour_brewer(type = "div") p2 + scale_colour_brewer(pallet = 2) p2 + scale_colour_brewer(pallet = 3)
  62. 62. coord Coordinate System 62
  63. 63. coord:座標系の設定 • X軸とY軸を同じ縮尺にするか、どの測地系を使 うか、X軸とY軸をひっくり返すか、とか。 • 「coord_XXXX()」という名前 63
  64. 64. coordの例 64 coord 座標系 coord_cartesian ただの直交座標系 coord_fixed X/Yの比率が固定された座標系 coord_flip X軸とY軸を入れ替えた座標系 coord_polar 円グラフのための座標系 coord_map/coord_quickmap 地図のための座標系
  65. 65. 参考:scaleとcoordの関係 • scaleは、実際に値を変形する • coordは、眺め方を変える(値は変わらない) ※個人的なイメージです 65
  66. 66. 参考:scaleとcoordの関係 66 p + coord_cartesian(xlim = c(1, 25)) d <- data.frame(x=1:50, y=c(1:25, 25:1)) p <- ggplot(d, aes(x, y)) + geom_point() + geom_smooth() p + scale_x_continuous(limits = c(1, 25)) 例:ある範囲のみのグラフ • scaleは範囲外の値をカット • coordはズームするだけ
  67. 67. coordの指定の仕方 • そのまま • X軸とY軸を入れ替える • 軸の比率を1:1に 67 p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p p + coord_flip() p + coord_fixed(ratio = 1)
  68. 68. まとめ 68
  69. 69. ggplot2の要素 • data:データ • aes:マッピング • geom/stat:グラフの種類 • position:要素の位置 • facet:分割 • scale:スケールの変形 • coord:座標軸 69 グラフを描くのに必要 意識しなくても描ける 知ってるとモアベター
  70. 70. ※今回説明していないこと • スタイルの設定(フォントの設定、ラベルのつけ 方、テーマの共有など) • 画像に保存する方法(ggsave) • ggplot2とあわせて使うと便利なパッケージ (例:GGally, gridExtra, directlabels) • 落とし穴(例:積み重ねと思ってたけど積み重 なってなかった…(実話)) などなど… 70
  71. 71. 分からないときは 71
  72. 72. 公式ドキュメント 72(http://docs.ggplot2.org/current/)
  73. 73. 公式チートシート 73(https://www.rstudio.com/wp-content/uploads/2015/08/ggplot2-
  74. 74. ggplot2 book(発売が待ち遠しい…) 74(https://github.com/hadley/ggplot2-book/)
  75. 75. ggplot2逆引き 75(https://yutannihilation.github.io/ggplot2-gyakubiki/)
  76. 76. r-wakalang (Rについて気軽に質問できるチャット。オススメ!) 76(詳しくは、http://www.slideshare.net/teramonagi/ss-52463319)
  77. 77. 77 Enjoy!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×