ggplot2でちょっと複雑なグラフができるまで

5.5K Views

December 07, 24

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ggplot2でちょっと 複雑なグラフができるまで @Yoshizou301 2024/12/07 Japan.R 2024

2.

⾃⼰紹介 • yoshizou X: @Yoshizou301 p 職業: データサイエンティスト p R歴: 学⽣の頃から数えて6年ほど 1

3.

こんなグラフを描きたいな {drc}のryegrassデータセットに⽤量反応曲線をフィッティングした図 2

4.

イメージを具体化したい 脳内イメージ グラフ 3

5.

グラフ完成までのギャップ この過程で何を考えていて、 何をしているのか︖ 4

6.

本LTで”話さないこと” • {ggplot2}などのパッケージの 具体的な使い⽅ • デザイン的に良いグラフの描き⽅ や良い可視化の⼿法 5

7.

グラフ出⼒までの3つの過程 1. グラフを要素に分解する 2. インプットを考える 3. 要素をコードに落とし込む 6

8.

グラフ出⼒までの3つの過程 1. グラフを要素に分解する 2. インプットを考える 3. 要素をコードに落とし込む 7

9.

グラフを要素に分解する どんな要素から成り⽴っている…︖ 8

10.

グラフを要素に分解する 散布図と関数 タイトル 凡例(⾊分け) 軸ラベル 対数軸 9

11.

グラフ出⼒までの3つの過程 1. グラフを要素に分解する 2. インプットを考える 3. 要素をコードに落とし込む 10

12.

インプットを考える • 散布図: (x, y)の⼆次元データ • 関数: 描画する関数の式 𝑑−𝑐 𝑓 𝑥 =𝑐+ 1 + exp(𝑏(log 𝑥 − log(𝑒))) 11

13.

グラフ出⼒までの3つの過程 1. グラフを要素に分解する 2. インプットを考える 3. 要素をコードに落とし込む 12

14.

要素をコードに落とし込む ggplot(data aes(x = conc, y = rootl)) + geom_point() + geom_function(fun = fun_ll4, aes(col = "4 parameter log-logistic")) + geom_function(fun = fun_g4, aes(col = "4 parameter Gompertz")) + geom_function(fun = fun_w14, aes(col = "4 parameter Weibull")) + scale_x_log10(breaks = c(1, 5, 10)) + labs( x = "Concentration of ferulic acid (mM)", y = "Root length of ryegrass", color = "Fitting method" ) + ggtitle("Dose-response curve fitting") + theme( plot.title = element_text(size = 20, hjust = 0.5) ) 13

15.

コードを書くとき意識すること • 徐々に要素を⾜していく pまずは散布図を置いてみて… といった具合 • コードと1対1で対応するように うまく要素分けできてるとGood︕ p特に{ggplot2}は対応させやすい 14

16.

要素をコードに落とし込む ggplot(data aes(x = conc, y = rootl)) + geom_point() + geom_function(fun = fun_ll4, aes(col = "4 parameter log-logistic")) + geom_function(fun = fun_g4, aes(col = "4 parameter Gompertz")) + geom_function(fun = fun_w14, aes(col = "4 parameter Weibull")) + scale_x_log10(breaks = c(1, 5, 10)) + labs( x = "Concentration of ferulic acid (mM)", y = "Root length of ryegrass", color = "Fitting method" ) + ggtitle("Dose-response curve fitting") + theme( plot.title = element_text(size = 20, hjust = 0.5) ) 散布図 15

17.

要素をコードに落とし込む ggplot(data aes(x = conc, y = rootl)) + geom_point() + geom_function(fun = fun_ll4, aes(col = "4 parameter log-logistic")) + geom_function(fun = fun_g4, aes(col = "4 parameter Gompertz")) + geom_function(fun = fun_w14, aes(col = "4 parameter Weibull")) + scale_x_log10(breaks = c(1, 5, 10)) + labs( x = "Concentration of ferulic acid (mM)", y = "Root length of ryegrass", color = "Fitting method" ) + ggtitle("Dose-response curve fitting") + theme( plot.title = element_text(size = 20, hjust = 0.5) ) 関数 16

18.

要素をコードに落とし込む ggplot(data aes(x = conc, y = rootl)) + geom_point() + geom_function(fun = fun_ll4, aes(col = "4 parameter log-logistic")) + geom_function(fun = fun_g4, aes(col = "4 parameter Gompertz")) + geom_function(fun = fun_w14, aes(col = "4 parameter Weibull")) + scale_x_log10(breaks = c(1, 5, 10)) + labs( x = "Concentration of ferulic acid (mM)", y = "Root length of ryegrass", color = "Fitting method" ) + ggtitle("Dose-response curve fitting") + theme( plot.title = element_text(size = 20, hjust = 0.5) ) 対数軸 17

19.

要素をコードに落とし込む ggplot(data aes(x = conc, y = rootl)) + geom_point() + geom_function(fun = fun_ll4, aes(col = "4 parameter log-logistic")) + geom_function(fun = fun_g4, aes(col = "4 parameter Gompertz")) + geom_function(fun = fun_w14, aes(col = "4 parameter Weibull")) + scale_x_log10(breaks = c(1, 5, 10)) + labs( x = "Concentration of ferulic acid (mM)", y = "Root length of ryegrass", color = "Fitting method" ) + ggtitle("Dose-response curve fitting") + theme( plot.title = element_text(size = 20, hjust = 0.5) ) 凡例、軸ラベル 18

20.

要素をコードに落とし込む ggplot(data aes(x = conc, y = rootl)) + geom_point() + geom_function(fun = fun_ll4, aes(col = "4 parameter log-logistic")) + geom_function(fun = fun_g4, aes(col = "4 parameter Gompertz")) + geom_function(fun = fun_w14, aes(col = "4 parameter Weibull")) + scale_x_log10(breaks = c(1, 5, 10)) + labs( x = "Concentration of ferulic acid (mM)", y = "Root length of ryegrass", color = "Fitting method" ) + ggtitle("Dose-response curve fitting") + theme( plot.title = element_text(size = 20, hjust = 0.5) ) タイトル 19

21.

最初は難しい…うまくなるには︖ • {ggplot2}のサンプルコードを ⾒て描けるもののイメージを掴む • 試しにいろんなグラフを描いて 勘所を掴む 20

22.

Enjoy! © Presentation Design 21