Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
{cowplot}で複数のグラフを結合する / {ggh4x}でX 軸・Y 軸のラベルをうまく扱う
Search
kyn02666
October 06, 2023
Programming
0
1.5k
{cowplot}で複数のグラフを結合する / {ggh4x}でX 軸・Y 軸のラベルをうまく扱う
第109回R勉強会@東京(#TokyoR)
https://tokyor.connpass.com/event/296561/
kyn02666
October 06, 2023
Tweet
Share
Other Decks in Programming
See All in Programming
WebAssembly Unleashed: Powering Server-Side Applications
chrisft25
0
1.9k
Jakarta EE meets AI
ivargrimstad
0
320
React CompilerとFine Grained Reactivityと宣言的UIのこれから / The next chapter of declarative UI
ssssota
7
2.7k
Arm移行タイムアタック
qnighy
0
390
As an Engineers, let's build the CRM system via LINE Official Account 2.0
clonn
1
570
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
9
4k
The rollercoaster of releasing an Android, iOS, and macOS app with Kotlin Multiplatform | droidcon Italy
prof18
0
110
cmp.Or に感動した
otakakot
3
330
React への依存を最小にするフロントエンド設計
takonda
21
8.3k
大規模サイトリビルドの現場から:成功と失敗のリアルな教訓 / Site Rebuild,Real Lessons Learned from Successes and Failures_JJUG Fall 2024
techtekt
0
190
ペアーズにおけるAmazon Bedrockを⽤いた障害対応⽀援 ⽣成AIツールの導⼊事例 @ 20241115配信AWSウェビナー登壇
fukubaka0825
6
2.3k
.NET のための通信フレームワーク MagicOnion 入門 / Introduction to MagicOnion
mayuki
1
2.9k
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Become a Pro
speakerdeck
PRO
25
5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Code Reviewing Like a Champion
maltzj
520
39k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
[RailsConf 2023] Rails as a piece of cake
palkan
52
5k
Adopting Sorbet at Scale
ufuk
73
9.1k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
Agile that works and the tools we love
rasmusluckow
327
21k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Transcript
第109回 Tokyo.R 発表者:das Kino (@kyn02666) 1 • {cowplot}で複数のグラフを結合する • {ggh4x}でX軸・Y軸のラベルをうまく扱う
自己紹介 • 仕事:心理学関係の研究を少々 • というわけで本トークは、「論文を書くとき」という文脈が強い • これらの本の著者 2
今日のトークの背景 3 友達 私 今度、〇〇に 論文出そうと思って ひょえー! Figureをgglot2で 描きたいんだけど、 助けてくれん?
ひょえー!
4 友達 こんなグラフを 描いてほしいのだぜ ※許可を得たうえで公開 ※元研究がわからないよう データやラベルは適当
5 解説ポイント ③ラインを揃える ④交互作用のラベルを ネストする ②空白 ①枠 ①軸の目盛を消す ②隙間を あける
6 ちなみにどれも、英語でググれば Stack Overflowで答えが見つかります オレでなきゃ見逃しちゃうね
①軸の目盛を消す / グラフを枠で囲む 7 目盛を消す 枠で囲む とにかく見栄え関係は、theme()をいじれば何とかなる
8 fillで塗られるのは、 データが描画される領域ではなく、 軸部分であることに注意 fillしたくなければ、わざわざNAを指定しなくてもよい
②複数のグラフをパネルで並べたときに 空白を作る • そもそも、複数のグラフをパネルで並べる方法は? • {patchwork}パッケージ • {cowplot}パッケージ • 他にもあるが、とりわけこれらのパッケージが便利
• {patchwork}一択だろうと思っていたが、 {cowplot}が意外と便利だった 9
{patchwork}で複数のグラフを並べる • g1, g2, g3がそれぞれggplotオブジェクトのとき 10 もっと柔軟なレイアウトが可能なので、詳しくは公式Vignetteを参照
11 挙動が違うので気を付けて 空白を作る{patchwork}の関数 (厳密にはempty transparent patch)
{cowplot}で複数のグラフを並べる • g1, g2, g3, g4, g5, g6がそれぞれggplotオブジェクトのとき 12 r1~r3は行ごとに結合したパネル
{patchwork}のplot_spacer()に相当
13 引数scaleで、各グラフの倍率を操作可能 → 1未満のscaleを与えることで、 結果的にグラフ同士に隙間が生まれる
14 ③ここのラインを揃えるにはどうすればよい? → 各行のグラフ数から計算する!! ⇒ 2行目、グラフ数2のとき10%小さくなっているので、 グラフ数が3なら(1行目)、10 × 3 2
= 15%の縮小
15 余談 ggplot2自体のtheme()関数を用いると、 余白サイズを増やして、 それに押しやられるように、 グラフエリアを小さくできる ただし全体サイズは変化しないので、 輪郭を持つ場合にはおそらく使いづらい
④交互作用の要因をネストする 16 恐らく、ggplot2だけではできない
そもそも交互作用を可視化するには 17 このようなデータがあるとして
18 簡単にできる。 ただし2つの要因のラベルがネストされない (右図のようにしたい)
19 interaction()を使えば、 「要因の全組み合わせ」を X軸にマッピングできるが、 今回描きたいグラフはこれではない ※interaction()はbaseの関数
余談:interaction() 20 factor型のベクトルが複数あるとき、それらを組み合わせた1つのベクトルを作る
21 マニアックではあるが、中には便利な関数もある
22 この部分はlabs()などで 書き換えればいい
23 解説 baseの関数interaction()は、デフォルトでsep = “.”の引数を持つ → よってスライド19のように、要因が「A.a」「A.b」という風にドットで結合される (もちろん任意のsepを指定してもよい) ⇒ それと同じ文字を引数delimに与えると、そこで分離してラベルがネストされる
24 X軸とY軸を入れ替える場合、 coord_flip()を使う ※X軸とY軸にマッピングする変数を 入れ替える方法ではおそらく実現不可
25 友達 私 できたで 横線いらんなぁ (こいつほんま…)
26 themeの要素を消したければ、 とりあえず該当する引数に element_blank()を与えればよい (スライド7と同様)
27 もちろん消すだけでなく、調整もできる
28 そんなわけで完成
おまけ:2軸グラフの上手い使い方 • 2軸グラフはミスリーディングな場合があるので、一般的に推奨されない • どうしても描きたい場合には、{cowplot}パッケージで手軽に描ける • しかし図のようなグラフを描くとき、2軸グラフを上手く使える 29 グラフエリア外にテキストを 追加しているのがポイント
30 secondary Y axisを消している ※ 正攻法でやるなら、 + theme(axis.line.y.right = element_blank())
secondary Y axisの目盛を、水平線の位置だけに表示させている
31 友達 私 今度、Tokyo.Rで 例のFigureの作り方 トークしていい? ぜんぜんいいよー ありがとう! ちなみに結局、 グラフは1枚ずつ
載せることにした 後日譚
32 これはお前が始めた物語だろ
take home message • Rプログラミングで困ったら、英語でググろう • やはりStack Overflow、 Stack Overflowはすべてを解決する
• 公式Vignetteを読み込もう • 痒い所に手が届く事例がたくさんある • 新刊よろしくお願いします • Enjoy! 33