SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
ggplot2をつかってみよう
伊東宏樹
2019-03-02 SappoRo.R #9 @ 北海学園大学
1
はじめに
2
今回の発表に使用したコード
GitHub (https://github.com/ito4303/SappoRoR9) で公開
3
このごろよくみるこのようなグラフ
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
Sepal length (cm)
Sepalwidth(cm)
Species
Iris setosa
I. versicolor
I. virginica
4
ggplot2
• ggplot2パッケージ
5
ggplot2
• ggplot2パッケージ
• gg: Grammer of Graphics
5
ggplot2
• ggplot2パッケージ
• gg: Grammer of Graphics
• 統一された文法でさまざまな種類のグラフをえがける。
5
ggplot2
• ggplot2パッケージ
• gg: Grammer of Graphics
• 統一された文法でさまざまな種類のグラフをえがける。
• 関連パッケージもどんどんできている。
5
ggplot2
• ggplot2パッケージ
• gg: Grammer of Graphics
• 統一された文法でさまざまな種類のグラフをえがける。
• 関連パッケージもどんどんできている。
• GGally, ggmcmc, ggmap, ggthemes, gghighlight,
egg...
5
開発者など
• 開発者: 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
ggplot2の使い方
7
ggplot 関数
ggplot オブジェクトを生成する。
p <- ggplot(data = iris)
print(p)
8
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
種類ごとに色をかえる
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
こうしてもおなじ
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
すべての点の色をかえる
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
種類ごとに点の形をかえる
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
点を大きくする
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
色を指定する
scale_colour_manual 関数で,任意の色を指定できる。
p2 + scale_colour_manual(values = c("black", "red", "#3355FF"))
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
Sepal.Length
Sepal.Width
Species
setosa
versicolor
virginica
15
カナや漢字をつかう
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
カナや漢字をつかった表示
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
萼長 (cm)
萼幅(cm)
種
ヒオウギアヤメ
イリス・ヴェルシカラー
イリス・ヴァージニカ
17
図をファイルに保存する
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
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
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
theme をかえる (3)
library(ggthemes)
p2 + scale_colour_excel() + theme_excel()
2.0
2.5
3.0
3.5
4.0
4.5
5 6 7 8
Sepal.Length
Sepal.Width
Species
setosa
versicolor
virginica
21
facet: 分割して表示
facet_wrap 関数を使用して,種ごとに分割して表示。
p3 + facet_wrap(~ Species) + theme(legend.position = "none")
setosa versicolor virginica
5 6 7 8 5 6 7 8 5 6 7 8
2.0
2.5
3.0
3.5
4.0
4.5
萼長 (cm)
萼幅(cm)
22
いろいろなグラフ
23
geom_* 関数
• geom_bar
• geom_boxplot
• geom_contour
• geom_density
• geom_errorbar
• geom_histogram
• geom_line
• geom_polygon
• geom_ribbon
• geom_smooth
• geom_tile
などなど
24
折れ線グラフ
geom_line 関数
ナイル川のデータ
(p <- ggplot(df_Nile, aes(x = Year, y = Level)) + geom_line())
600
800
1000
1200
1400
1875 1900 1925 1950
Year
Level
25
折れ線グラフ+点
geom_line と geom_point の両方を使用。
p + geom_line(linetype = 2) + geom_point(size = 2)
600
800
1000
1200
1400
1875 1900 1925 1950
Year
Level
26
平滑化曲線
geom_smooth を使用。
p + geom_line(linetype = 2) + geom_smooth(method = "loess")
600
800
1000
1200
1400
1875 1900 1925 1950
Year
Level
27
棒グラフ
geom_bar 関数
set.seed(1); x <- rpois(200, 2)
p <- ggplot(data.frame(x = x), aes(x))
p + geom_bar(fill = "grey50")
0
20
40
60
0 2 4 6
x
count
28
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
関数のグラフと数式
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
地図データ
@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
地図データの描画
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
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
おわりに
34
参考リンク
きょう紹介できたのはごく一部。下のリンクなどを参考に。
• ggplot2(公式ウェブサイト)
• http://ggplot2.tidyverse.org/
• ggplot2 に関する資料(前田和寛 ‘@kazutan’ さん)
• https://kazutan.github.io/kazutanR/ggplot2_links.html
• ggplot2 — きれいなグラフを簡単に合理的に(岩嵜航さん)
• https://heavywatal.github.io/rstats/ggplot2.html
• グラフ描画 ggplot2 の辞書的まとめ 20 のコード(MrUnadon
さん)
• https://mrunadon.github.io/ggplot2/
35
参考リンク(つづき)
• 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

Mais conteúdo relacionado

Mais procurados

Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Uplift Modelling 入門(1)
Uplift Modelling 入門(1)
Yohei Sato
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo
 

Mais procurados (20)

DiagrammeRと仲良くなった話ーグラフィカルモデルのためのDiagrammeR速習ー
DiagrammeRと仲良くなった話ーグラフィカルモデルのためのDiagrammeR速習ーDiagrammeRと仲良くなった話ーグラフィカルモデルのためのDiagrammeR速習ー
DiagrammeRと仲良くなった話ーグラフィカルモデルのためのDiagrammeR速習ー
 
Rによる分類木 入門
Rによる分類木 入門Rによる分類木 入門
Rによる分類木 入門
 
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
 
2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル
 
ggplotのplotエリアで日本語ラベルを使う
ggplotのplotエリアで日本語ラベルを使うggplotのplotエリアで日本語ラベルを使う
ggplotのplotエリアで日本語ラベルを使う
 
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
 
Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Uplift Modelling 入門(1)
Uplift Modelling 入門(1)
 
Discovery of Linear Acyclic Models Using Independent Component Analysis
Discovery of Linear Acyclic Models Using Independent Component AnalysisDiscovery of Linear Acyclic Models Using Independent Component Analysis
Discovery of Linear Acyclic Models Using Independent Component Analysis
 
第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)
 
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver){tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
 
質的変数の相関・因子分析
質的変数の相関・因子分析質的変数の相関・因子分析
質的変数の相関・因子分析
 
統計的因果推論への招待 -因果構造探索を中心に-
統計的因果推論への招待 -因果構造探索を中心に-統計的因果推論への招待 -因果構造探索を中心に-
統計的因果推論への招待 -因果構造探索を中心に-
 
順序データでもベイズモデリング
順序データでもベイズモデリング順序データでもベイズモデリング
順序データでもベイズモデリング
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使う
 
さくっとはじめるテキストマイニング(R言語)  スタートアップ編
さくっとはじめるテキストマイニング(R言語)  スタートアップ編さくっとはじめるテキストマイニング(R言語)  スタートアップ編
さくっとはじめるテキストマイニング(R言語)  スタートアップ編
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
 
識別モデルと生成モデルと損失データ
識別モデルと生成モデルと損失データ識別モデルと生成モデルと損失データ
識別モデルと生成モデルと損失データ
 
R seminar on igraph
R seminar on igraphR seminar on igraph
R seminar on igraph
 
pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話
 

Semelhante a ggplot2をつかってみよう

GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
arctic_tern265
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with Python
Atsushi Hayakawa
 

Semelhante a ggplot2をつかってみよう (20)

Tokyo r33 beginner
Tokyo r33 beginnerTokyo r33 beginner
Tokyo r33 beginner
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
あまぁいRcpp生活
あまぁいRcpp生活あまぁいRcpp生活
あまぁいRcpp生活
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
R intro
R introR intro
R intro
 
多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討
 
RGtk2入門
RGtk2入門RGtk2入門
RGtk2入門
 
Rによる作図入門 Introduction to Data Visualization with R
Rによる作図入門 Introduction  to Data Visualization with RRによる作図入門 Introduction  to Data Visualization with R
Rによる作図入門 Introduction to Data Visualization with R
 
Rを用いたGIS
Rを用いたGISRを用いたGIS
Rを用いたGIS
 
2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Gnuplotあれこれ
GnuplotあれこれGnuplotあれこれ
Gnuplotあれこれ
 
Perfect python section5
Perfect python section5Perfect python section5
Perfect python section5
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with Python
 
ggplot2 110129
ggplot2 110129ggplot2 110129
ggplot2 110129
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
 

Mais de Hiroki Itô (7)

R MarkdownとBeamerでプレゼンテーション資料作成
R MarkdownとBeamerでプレゼンテーション資料作成R MarkdownとBeamerでプレゼンテーション資料作成
R MarkdownとBeamerでプレゼンテーション資料作成
 
Stanとdlmによる状態空間モデル
Stanとdlmによる状態空間モデルStanとdlmによる状態空間モデル
Stanとdlmによる状態空間モデル
 
Dealing with latent discrete parameters in Stan
Dealing with latent discrete parameters in StanDealing with latent discrete parameters in Stan
Dealing with latent discrete parameters in Stan
 
里山とは何か?
里山とは何か?里山とは何か?
里山とは何か?
 
Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法
 
Satoyama woodland management
Satoyama woodland managementSatoyama woodland management
Satoyama woodland management
 
状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較
 

ggplot2をつかってみよう