Mais conteúdo relacionado
Semelhante a ggplot2をつかってみよう (20)
ggplot2をつかってみよう
- 9. ggplot2
• ggplot2パッケージ
• gg: Grammer of Graphics
• 統一された文法でさまざまな種類のグラフをえがける。
• 関連パッケージもどんどんできている。
• GGally, ggmcmc, ggmap, ggthemes, gghighlight,
egg...
5
- 10. 開発者など
• 開発者: Hadley Wickham ほか
• ウェブサイト: http://ggplot2.tidyverse.org/
• 開発履歴 1
• 2015-01-10 ver. 1.0.0
• 2015-12-19 ver. 2.0.0
• 2016-03-02 ver. 2.1.0
• 2016-11-15 ver. 2.2.0
• 2016-12-31 ver. 2.2.1
• 2018-07-04 ver. 3.0.0
• 2018-10-25 ver. 3.1.0
1
https://github.com/tidyverse/ggplot2/releases
6
- 13. geom_*関数
• geom_point 関数: 散布図を描画(レイヤーに追加)する関数
• mapping 引数: 変数のマッピングを渡す。
• aes 関数: 変数とグラフ要素との aesthetic mapping を生成
• ggplot オブジェクトに ‘+’ 演算子で,レイヤーを追加する。
p + geom_point(mapping = aes(x = Sepal.Length, y = Sepal.Width))
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
Sepal.Length
Sepal.Width
9
- 14. 種類ごとに色をかえる
aes 関数の colour(color でもよい)引数を指定する。
p + geom_point(mapping = aes(x = Sepal.Length, y = Sepal.Width,
colour = Species))
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
Sepal.Length
Sepal.Width
Species
setosa
versicolor
virginica
10
- 15. こうしてもおなじ
ggplot(data = iris,
mapping = aes(x = Sepal.Length, y = Sepal.Width,
colour = Species)) +
geom_point()
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
Sepal.Length
Sepal.Width
Species
setosa
versicolor
virginica
11
- 16. すべての点の色をかえる
aes 関数の外で colour を指定する(geom_point 関数の colour
引数に指定する)と,すべての点の色が指定した色になる。
p + geom_point(mapping = aes(x = Sepal.Length, y = Sepal.Width),
colour = "red")
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
Sepal.Length
Sepal.Width
12
- 17. 種類ごとに点の形をかえる
aes 関数の shape 引数を指定する。
p + geom_point(aes(x = Sepal.Length, y = Sepal.Width,
colour = Species, shape = Species))
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
Sepal.Length
Sepal.Width
Species
setosa
versicolor
virginica
13
- 18. 点を大きくする
geom_point 関数の size 引数を指定する。
p2 <- p + geom_point(aes(x = Sepal.Length, y = Sepal.Width,
colour = Species, shape = Species),
size = 4, alpha = 0.7)
print(p2)
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
Sepal.Length
Sepal.Width
Species
setosa
versicolor
virginica
14
- 20. カナや漢字をつかう
spp <- c("ヒオウギアヤメ", "イリス・ヴェルシカラー",
"イリス・ヴァージニカ")
p3 <- p2 + labs(x = "萼長 (cm)", y = "萼幅 (cm)") +
scale_colour_discrete(name = "種", labels = spp) +
scale_shape_discrete(name = "種", labels = spp) +
scale_size_continuous(name = "萼長 (cm)") +
theme(text = element_text(family = "IPAexGothic", size = 10))
ここでは IPAex ゴシックフォントを使用した。
文字コードは UTF-8 にしておくとよい(日本語版 Windows の
R.exe では文字化けするかも)。
Windows では windowsFonts 関数でフォントの設定をしておくか,
extrafont パッケージをインストールして,必要な設定をしておく。
16
- 22. 図をファイルに保存する
ggsave 関数などをつかう(R 標準のグラフィックデバイス関数
による出力も可能)。
ggsave("iris.pdf", device = cairo_pdf,
width = 12, height = 8, units = "cm")
日本語フォントを埋め込んだ PDF を出力するには device =
cairo_pdf とする(macOS では XQuartz のインストールが必要
かもしれない)。ただし,すべてのフォントでうまくいくとは限ら
ない。
Windows で PDF に日本語フォントを埋め込むためには,extrafont
パッケージを利用する必要がある(ただし,OpenType フォントは利用
不可らしい)。
macOS では,ggsave 関数のほか,quartz.save 関数も利用可能。
18
- 23. theme をかえる (1)
p3 + theme_bw(base_family = "IPAexGothic")
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
萼長 (cm)
萼幅(cm)
種
ヒオウギアヤメ
イリス・ヴェルシカラー
イリス・ヴァージニカ
19
- 24. theme をかえる (2)
p3 + theme_classic(base_family = "IPAexGothic")
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
萼長 (cm)
萼幅(cm)
種
ヒオウギアヤメ
イリス・ヴェルシカラー
イリス・ヴァージニカ
20
- 28. geom_* 関数
• geom_bar
• geom_boxplot
• geom_contour
• geom_density
• geom_errorbar
• geom_histogram
• geom_line
• geom_polygon
• geom_ribbon
• geom_smooth
• geom_tile
などなど
24
- 31. 平滑化曲線
geom_smooth を使用。
p + geom_line(linetype = 2) + geom_smooth(method = "loess")
600
800
1000
1200
1400
1875 1900 1925 1950
Year
Level
27
- 33. stat_*関数
統計的変換, 例) stat_count: データの頻度分布を計算する。
p + stat_count(geom = "bar", fill = "grey50")
0
20
40
60
0 2 4 6
x
count
• たいていの geom には対応する stat 関数がある。
• geom ではなくて stat で描画レイヤーを追加することも
可能。
29
- 34. 関数のグラフと数式
stat_function で関数を指定。annotate で注釈。parse = TRUE
で数式を解釈して表示。
ggplot(data.frame(x = seq(-5, 5, 0.01)), aes(x)) +
stat_function(fun = function(x) {1 / (1 + exp(-x))}) +
annotate("text", x = -5, y = 0.875,
label = paste("italic(y) == frac(1,",
"1 + exp(-(beta[0] + beta[1]*italic(x))))"),
parse = TRUE, size = 4, hjust = 0)
y =
1
1 + exp(−(β0 + β1x))
0.00
0.25
0.50
0.75
1.00
−5.0 −2.5 0.0 2.5 5.0
x
y
30
- 35. 地図データ
@u_ribo さん作の jpndisrict パッケージを利用する。
library(jpndistrict)
library(sf)
hokkaido <- jpn_pref(pref_code = 1)
sapporo <- jpn_cities(jis_code = paste0("0", 1101:1110))
別に人口データを用意して、データを付け加える。
library(dplyr)
load("Hokkaido_population.RData")
hokkaido <- dplyr::left_join(hokkaido, hokkaido_popl,
by = "city_code")
31
- 36. 地図データの描画
ver. 3 で追加になった geom_sf を使う。
ggplot(hokkaido) + geom_sf(aes(fill = population)) +
scale_fill_continuous(name = "人口", trans = "log10",
breaks = c(10^3, 10^4, 10^5),
labels = c("1000", "10000", "100000")) +
theme_bw(base_family = "IPAexGothic")
42°N
43°N
44°N
45°N
140°E 142°E 144°E 146°E 148°E
1000
10000
100000
人口
32
- 37. ggplot(sapporo) + geom_sf(aes(fill = city)) +
scale_fill_discrete(name = "市区", breaks = sapporo$city) +
coord_sf(crs = sf::st_crs(6680), datum = NA) +
theme_void(base_family = "IPAexGothic")
市区
札幌市 中央区
札幌市 北区
札幌市 東区
札幌市 白石区
札幌市 豊平区
札幌市 南区
札幌市 西区
札幌市 厚別区
札幌市 手稲区
札幌市 清田区
33
- 40. 参考リンク(つづき)
• ggplot2 逆引(Hiroaki Yutani さん)
• https://yutannihilation.github.io/ggplot2-gyakubiki/
• Cookbook for R: Graphs(Winston Chang さん)
• http://www.cookbook-r.com/Graphs/
• Stack Overflow での ggplot2 関連の質問
• https://stackoverflow.com/search?q=ggplot2
36