Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
{cowplot}で複数のグラフを結合する / {ggh4x}でX 軸・Y 軸のラベルをうまく扱う
Search
kyn02666
October 06, 2023
Programming
3.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
{cowplot}で複数のグラフを結合する / {ggh4x}でX 軸・Y 軸のラベルをうまく扱う
第109回R勉強会@東京(#TokyoR)
https://tokyor.connpass.com/event/296561/
kyn02666
October 06, 2023
Other Decks in Programming
See All in Programming
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
210
一人だけ、Kiroが静止する日
hideg
0
110
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
240
cdk deploy JawsSonic #MARATHONしながらAWSリソースをデプロイしてみよう
akihisaikeda
2
130
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
240
Security issues being discussed on Web Platforms
petamoriken
0
930
Heart of Swift Concurrency
koher
0
680
VueプロジェクトをTypeScript7に対応させる- Side-by-Side戦略による一部高速化 -
koukimiura
0
110
XHTMLが残したもの
yosuke_furukawa
PRO
2
800
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
200
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
1.1k
Facilitating Awesome Meetings
lara
57
7.1k
Thoughts on Productivity
jonyablonski
76
5.4k
Between Models and Reality
mayunak
4
460
GraphQLとの向き合い方2022年版
quramy
50
15k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The SEO identity crisis: Don't let AI make you average
varn
0
560
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