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
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
240
都道府県別焼き鳥屋ランキングの作成
nonki1974
1
930
Introduction to R
nonki1974
0
400
Introduction to dplyr
nonki1974
0
570
Analyzing PSB tracks with R
nonki1974
0
630
introduction to fukuoka.R @ Fukuoka.LT
nonki1974
0
81
所要時間のヒートマップを作成する
nonki1974
0
610
gtfsr package @ fukuoka.R #11
nonki1974
0
360
Other Decks in Technology
See All in Technology
KAEN Company Deck
kaen
PRO
0
320
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
3
680
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
260
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
620
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
0
1k
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
0
200
少人数データチームのDevin活用実践事例
runandy16
2
450
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
130
設計の世代交代を乗り越える、14年続くAndroidアプリの開発戦略
sansantech
PRO
1
150
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
200
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
130
はじめてのDatabricks:技術者向けワークショップ / beginner-workshop
databricksjapan
PRO
0
230
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
Marketing to machines
jonoalderson
1
5.7k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Product Roadmaps are Hard
iamctodd
55
13k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
720
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
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