Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction to ggplot2
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
nonki1974
April 06, 2019
Technology
550
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to ggplot2
nonki1974
April 06, 2019
More Decks by nonki1974
See All by nonki1974
GTFS with Tidytransit package
nonki1974
0
340
TokyoR#84_Rexams
nonki1974
0
230
都道府県別焼き鳥屋ランキングの作成
nonki1974
1
930
Introduction to R
nonki1974
0
390
Introduction to dplyr
nonki1974
0
560
Analyzing PSB tracks with R
nonki1974
0
620
introduction to fukuoka.R @ Fukuoka.LT
nonki1974
0
81
所要時間のヒートマップを作成する
nonki1974
0
600
gtfsr package @ fukuoka.R #11
nonki1974
0
360
Other Decks in Technology
See All in Technology
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
130
メルカリのグローバルアプリで挑んだ AlloyDB 運用と課題解決の実践記
hatappi
0
250
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
130
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
1
260
LanceDB入門
mocobeta
8
590
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
400
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.4k
なぜ Temporal の大小比較には compare しかないのか / Why Does Temporal Only Have compare() for Comparisons
kazukihayase
1
150
Reference-Free Image Quality Assessment for Virtual Try-On via Human Feedback
zozotech
PRO
0
600
【GCC2026】大規模言語モデルを活用した内製検索サービスの社内展開や業務活用
bandainamcostudios
PRO
0
220
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
Sets in Go
ramalho
1
1k
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
960
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
Believing is Seeing
oripsolob
1
190
Optimizing for Happiness
mojombo
378
71k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
170
Facilitating Awesome Meetings
lara
57
7.1k
A better future with KSS
kneath
240
18k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
640
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Transcript
Introduction to ggplot2 fukuoka.R #13 @nonki1974 April 7, 2019
ggplot2 package → Wilkinson(2005) による “Grammar of Graphics” の R
への実 装 → データの可視化のための一貫した文法と洗練された出力を提 供 → 開発者は dplyr と同じ Hadley Wickham 2
インストールとロードについて → tidyverse に含まれているため,tidyverse のインストー ルとロードができていれば OK → 個別にインストールする場合は以下の通り install.packages("ggplot2")
library(ggplot2) 3
本資料におけるバージョン packageVersion("ggplot2") ## [1] '3.1.0' 4
利用するデータ → ggplot2 に含まれる mpg データ → アメリカの環境保護局がまとめた 1999 年と
2008 年に発売 された新車の燃費データ 5
mpg データ mpg[1:6, 2:8] %>% knitr ::kable(booktabs = TRUE) model
displ year cyl trans drv cty a4 1.8 1999 4 auto(l5) f 18 a4 1.8 1999 4 manual(m5) f 21 a4 2.0 2008 4 manual(m6) f 20 a4 2.0 2008 4 auto(av) f 21 a4 2.8 1999 6 auto(l5) f 16 a4 2.8 1999 6 manual(m5) f 18 6
ggplot2 の基本 グラフ作成テンプレート ggplot(data = <DATA>) + <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))
→ ggplot() 関数でデータフレームを指定:座標平面が作成さ れる → GEOM_FUNCTION でプロットのレイヤーを追加 → MAPPINGS でプロットの要素とデータの対応を記述 7
散布図の例 ggplot(data = mpg) + geom_point(mapping = aes(x = cty,
y = hwy)) 20 30 40 10 15 20 25 30 35 cty hwy 8
他の記述法 # 引数名の省略 ggplot(mpg) + geom_point(aes(cty, hwy)) # aes の指定場所
ggplot(mpg, aes(cty, hwy)) + geom_point() → aes() で指定した対応関係は,以降のレイヤーに引き継がれ る 9
プロット要素とデータの対応の記述 → aesthetic mapping p <- ggplot(mpg, aes(cty, hwy)) p
+ geom_point(aes(color = class)) 20 30 40 10 15 20 25 30 35 cty hwy class 2seater compact midsize minivan pickup subcompact suv 10
プロット要素とデータの対応の記述 p + geom_point(aes(size = displ)) 20 30 40 10
15 20 25 30 35 cty hwy displ 2 3 4 5 6 7 11
1 変数に対するプロット 12
量的変数の場合(ヒストグラム) p <- ggplot(mpg) p + geom_histogram(aes(hwy)) ## `stat_bin()` using
`bins = 30`. Pick ## better value with `binwidth`. 0 10 20 30 40 10 20 30 40 hwy count 13
色の指定 p + geom_histogram(aes(hwy), binwidth = 2, fill = "cadetblue",
color = "black") 0 10 20 30 40 10 20 30 40 hwy count 14
質的変数の場合(棒グラフ) p + geom_bar(aes(class)) 0 20 40 60 2seater compact
midsize minivan pickup subcompact suv class count 15
降順にソート forcats ::fct_infreq():因子型の水準の順序を値の出現 頻度順に並べ替える p + geom_bar(aes(fct_infreq(class))) + xlab("class") 0
20 40 60 suv compact midsize subcompact pickup minivan 2seater class count 16
帯グラフ p + geom_bar(aes(fct_infreq(class), fill = fl), position = "fill")
+ xlab("class") 0.00 0.25 0.50 0.75 1.00 suv compact midsizesubcompact pickup minivan 2seater class count fl c d e p r 17
集合縦棒グラフ p + geom_bar(aes(fct_infreq(class), fill = fl), position = "dodge")
+ xlab("class") 0 10 20 30 40 50 suv compact midsize subcompact pickup minivan 2seater class count fl c d e p r 18
2 変数に対するプロット 19
x: 量的変数,y: 量的変数の場合(散布図) p + geom_point(aes(cty, hwy)) + geom_smooth(method =
"lm") 20 30 40 50 10 15 20 25 30 35 cty hwy 20
重複する点の処理(点のサイズに反映) mpg %>% group_by(cty, hwy) %>% mutate(n = n()) %>%
ggplot(aes(cty, hwy, size = n)) + geom_point() + geom_smooth(method = "lm") 20 30 40 50 10 15 20 25 30 35 cty hwy n 5 10 21
重複する点の処理(jitter 処理) p + geom_point(aes(cty, hwy), position = "jitter") +
geom_smooth(method = "lm") 10 20 30 40 50 10 20 30 cty hwy 22
x: 質的変数,y: 量的変数の場合(箱ひげ図) p + geom_boxplot(aes(class, hwy)) 20 30 40
2seater compact midsize minivan pickupsubcompact suv class hwy 23
中央値の降順で因子水準をソート p + geom_boxplot(aes( fct_reorder(class, hwy, median, .desc = TRUE),
hwy)) + xlab("class") 20 30 40 compact midsize subcompact 2seater minivan suv pickup class hwy 24
質的変数による プロット分割 (Facetting) 25
質的変数によるプロット分割 p <- ggplot(mpg, aes(cty, hwy)) p + geom_point() +
facet_grid(. ~ fl) c d e p r 101520253035 101520253035 101520253035 101520253035 101520253035 20 30 40 cty hwy 26
質的変数によるプロット分割 (2 変数で) p + geom_point() + facet_grid(year ~ fl)
c d e p r 1999 2008 101520253035 101520253035 101520253035 101520253035 101520253035 20 30 40 20 30 40 cty hwy 27
集計表に対する棒グラフ 28
集計表に対する棒グラフ df <- data.frame(btype = c("A", "B", "O", "AB"), female
= c(60, 40, 30, 15), male = c(40, 30, 20, 10)) btype female male A 60 40 B 40 30 O 30 20 AB 15 10 29
wide -> long 形式への変換 tidyr ::gather() を使う df.long <- gather(df,
key = gender, value = value, male, female) df.long ## btype gender value ## 1 A male 40 ## 2 B male 30 ## 3 O male 20 ## 4 AB male 10 ## 5 A female 60 ## 6 B female 40 ## 7 O female 30 ## 8 AB female 15 30
棒グラフの作成 stat = "identity" を指定 ggplot(df.long, aes(fct_reorder(btype, value, sum, .desc
= TRUE), val fill = gender)) + xlab("btype") + geom_bar(stat = "identity", position = "dodge") 0 20 40 60 A B O AB btype value gender female male 31
外見の調整 32
テーマの設定 ggplot(mpg, aes(displ, cty)) + geom_point() + theme_minimal(base_size = 18)
10 15 20 25 30 35 2 3 4 5 6 7 displ cty 33
タイトル・軸ラベルの設定 ggplot(mpg, aes(displ, cty)) + geom_point() + theme_minimal(base_size = 18)
+ labs(title = " 排気量と燃費の関係", x = " 排気量 [l]", y = " 市街地燃費 [mpg]") 10 15 20 25 30 35 2 3 4 5 6 7 排気量[l] 市街地燃費[mpg] 排気量と燃費の関係 34
GGally パッケージの利用 35
インストールとパッケージの読み込み install.packages("GGally") library(GGally) ## ## Attaching package: 'GGally' ## The
following object is masked from 'package:dplyr': ## ## nasa 36
平行座標プロット ggparcoord(mpg, columns = c(4, 3, 8, 9), groupColumn =
"class") + theme_minimal(base_size = 18) -2 0 2 4 year displ cty hwy variable value class 2seater compact midsize minivan pickup subcompact suv 37
相関行列の可視化(データの読み込み) nba <- read.csv( "http: //datasets.flowingdata.com/ppg2008.csv") 38
相関行列の可視化 ggcorr(nba[,-1]) G MIN PTS FGM FGA FGP FTM FTA
FTP X3PM X3PA X3PP ORB DRB TRB AST STL BLK TO PF -1.0 -0.5 0.0 0.5 1.0 39
相関行列の可視化(オプション設定) ggcorr(nba[,-1], label = TRUE, label_size = 1, label_round =
2, label_alpha = TRUE) 0.19 0.06 0.04 -0.06 0.18 -0.01 0.01 0.04 0.14 0.11 0.12 0.05 0.12 0.1 0.14 -0.03 0.13 -0.05 -0.03 0.4 0.3 0.41 -0.22 0.27 0.18 0.22 0.13 0.13 0.11 -0.07 0.05 0.01 0.28 0.33 -0.07 0.32 -0.39 0.85 0.83 0.07 0.67 0.61 0.03 0.03 0.04 0.01 0.01 0.25 0.17 0.22 0.36 0.24 0.34 -0.15 0.87 0.27 0.28 0.29 -0.13 -0.23 -0.22 -0.09 0.23 0.38 0.34 0.11 0.22 0.33 0.14 -0.12 -0.23 0.25 0.17 0.11 0.1 0.14 -0.02 -0.1 0.08 0.02 0.17 0.33 0 0.16 -0.24 0.07 0.25 -0.52 -0.64 -0.67 -0.16 0.66 0.61 0.65 -0.16 -0.23 0.68 -0.02 0.26 0.95 -0.03 -0.14 -0.13 -0.02 0.01 0.24 0.17 0.23 0.3 0.23 0.54 0.03 -0.33 -0.29 -0.27 -0.21 0.21 0.4 0.34 0.16 0.26 0.42 0.52 0.12 0.53 0.5 0.6 -0.62 -0.53 -0.58 0.2 0.07 -0.54 -0.02 -0.25 0.99 0.31 -0.64 -0.59 -0.63 0.09 0.16 -0.49 -0.11 -0.25 0.28 -0.65 -0.61 -0.65 0.16 0.24 -0.52 -0.06 -0.27 -0.31 -0.25 -0.28 0.04 -0.04 -0.26 0.1 -0.07 0.85 0.93 -0.46 -0.33 0.74 -0.13 0.41 0.98 -0.4 -0.27 0.77 0.03 0.43 -0.43 -0.3 0.79 -0.03 0.43 0.62 -0.32 0.5 -0.43 -0.26 0.45 -0.19 0.12 0.37 0.07 G MIN PTS FGM FGA FGP FTM FTA FTP X3PM X3PA X3PP ORB DRB TRB AST STL BLK TO PF -1.0 -0.5 0.0 0.5 1.0 40