5.4K Views
December 07, 24
スライド概要
ggplot2でちょっと 複雑なグラフができるまで @Yoshizou301 2024/12/07 Japan.R 2024
⾃⼰紹介 • yoshizou X: @Yoshizou301 p 職業: データサイエンティスト p R歴: 学⽣の頃から数えて6年ほど 1
こんなグラフを描きたいな {drc}のryegrassデータセットに⽤量反応曲線をフィッティングした図 2
イメージを具体化したい 脳内イメージ グラフ 3
グラフ完成までのギャップ この過程で何を考えていて、 何をしているのか︖ 4
本LTで”話さないこと” • {ggplot2}などのパッケージの 具体的な使い⽅ • デザイン的に良いグラフの描き⽅ や良い可視化の⼿法 5
グラフ出⼒までの3つの過程 1. グラフを要素に分解する 2. インプットを考える 3. 要素をコードに落とし込む 6
グラフ出⼒までの3つの過程 1. グラフを要素に分解する 2. インプットを考える 3. 要素をコードに落とし込む 7
グラフを要素に分解する どんな要素から成り⽴っている…︖ 8
グラフを要素に分解する 散布図と関数 タイトル 凡例(⾊分け) 軸ラベル 対数軸 9
グラフ出⼒までの3つの過程 1. グラフを要素に分解する 2. インプットを考える 3. 要素をコードに落とし込む 10
インプットを考える • 散布図: (x, y)の⼆次元データ • 関数: 描画する関数の式 𝑑−𝑐 𝑓 𝑥 =𝑐+ 1 + exp(𝑏(log 𝑥 − log(𝑒))) 11
グラフ出⼒までの3つの過程 1. グラフを要素に分解する 2. インプットを考える 3. 要素をコードに落とし込む 12
要素をコードに落とし込む 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
コードを書くとき意識すること • 徐々に要素を⾜していく pまずは散布図を置いてみて… といった具合 • コードと1対1で対応するように うまく要素分けできてるとGood︕ p特に{ggplot2}は対応させやすい 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) ) 散布図 15
要素をコードに落とし込む 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
要素をコードに落とし込む 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
要素をコードに落とし込む 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
要素をコードに落とし込む 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
最初は難しい…うまくなるには︖ • {ggplot2}のサンプルコードを ⾒て描けるもののイメージを掴む • 試しにいろんなグラフを描いて 勘所を掴む 20
Enjoy! © Presentation Design 21