TL; DR
現実
- 何も考えずに デフォルト設定のまま プロット
- フォントサイズや線の太さなどを 場当たり的に 設定
- 膨れ上がるオプション…
plt.plot(x, y, markersize=16, fontsize=24, linewidth=2, xlabel="Time", ...)
- 膨れ上がるオプション…
- 完成した図を 拡大・縮小 して載せるせいでバランスが崩壊
- 論文と発表スライドで 同じ図を流用 するために本文のフォントサイズとのバランスが崩壊
理想
- 図を載せる媒体の 大きさを調べる
- その媒体に適した大きさの図を 設計 する
背景
論文執筆,研究発表において実験を視覚的に伝えるために図は非常に有用です.
しかし,図の大きさやフォントサイズのバランスが崩れているために伝わりづらくなっている残念な図を非常によく見かけます.
その原因は 大きさを意識していない からであると一言で言えます.
大きさとは論文・スライドに載せる図の大きさと,それを載せる対象である媒体の大きさの両方が含まれます.
よく見る残念な例
ここでは研究のプレゼンテーション資料を Microsoft Powerpoint (以下,パワポ)で作成し,実験結果の図を matplotlib で作成することを想定し,デフォルトではなぜいけないのかを説明します.
まずは matplotlib のデフォルトをそのまま使うとどうなるかを確認しましょう.
次の図はデフォルトの図をそのままパワポの 16:9 スライドのデフォルトサイズのスライドに載せた場合です.
図中のグラフの赤い枠線は matplotlib が出力する図全体の大きさをみやすくするためにつけています.
図全体の大きさはちょうどよいですが,図中のフォントサイズがとても小さいことがわかります.
それもそのはず,matplotlib のデフォルトのフォントサイズは 10 pt だからです.
論文であればフォントサイズが 10 pt 前後なのでこのくらいでもいいですが,プレゼンテーション資料には向きません.
しかし論文に使った図をプレゼンテーション資料に使い回したなどの理由で,このようなバランスの悪いスライドはかなり多く見られます.
ではこの資料を見た共著者から「字が小さいから作り直してくれ!」というコメントを受けたとしましょう.
場当たり的に fontsize=24
というオプションを plt.xlabel
や plt.title
の各種メソッドに追加して作り直した図をパワポにそのまま挿入するとこうなります.
図を全体的に大きくしているので当然このような結果になるでしょう.
そして多くの人はこの図を拡大縮小してスライドの大きさに合わせます.
すると今度はこうなります.
せっかくフォントサイズを大きくしたのに図を全体的に縮小してしまっています.
最初のページと見比べてみてください,結局あまり変わっていません.
図を全体的に大きくしたのが間違いだったようです.
ではパワポ内で拡大縮小することをやめてみるとどうなるでしょうか.
matplotlib 側で描画領域の大きさを調整する必要があります.
matplotlib には tight_layout()
というメソッドがありますので,それを使って軸ラベルなどを描画領域におさまるようにしてみましょう.
まだ余白が大き過ぎますね.
これは matplotlib 内で tight_layout()
を呼び出した時の余白の設定があるからです.
これを少し調整しましょう.
ずいぶんましになりました.
バランスのとれた図の作り方
以下では研究のための図を作成するために役立つ一般的な方法を共有します.
その方法は 図の大きさを意識する だけです.
とても簡単なことですが,簡単すぎて多くの人が見過ごしています.
ここではパワポに載せる図を例に,パワポで図を拡大縮小することなく何も調整しない状態で狙った大きさになるような図の作り方を説明します.
まずは図を載せる媒体の大きさを調べます.
これがわからなくては,図をどれくらいのバランスで描くべきか検討がつきません.
パワポであれば,スライド全体の大きさは「デザイン」タブの「スライドのサイズ」で確認できます.
次に載せたい図を大きさを決めます.
この例では幅をスライド 6 割くらい,アスペクト比を黄金比になるようにしてみました.
パワポであれば適当に四角形を描いてみて,「図の書式設定」で大きさを確認できます.
この大きさをメモしておきます.
ついでに,パワポのスライド内のフォントサイズも調べておきましょう.
このスライドでは本文のフォントサイズは 28 pt でした.
適切に設定すれば次のようになります.
図の拡大縮小はもはや必要ありません.
LaTeX で \includegraphics[width=\linewidth]{example.pdf}
などもってのほかです.
ここまでの説明はパワポでのプレゼンテーションに限らず,論文,書籍,ポスター発表,口頭発表などあらゆる媒体で使える方法論です.
例えば,論文によく用いられている A4 用紙は横 210mm 縦 297mm です.
A4 2 段組み論文のほとんどが左右に 15mm 程度の余白があるため,実際に有効な幅は 90mm 程度であることを考えると matplotlib のデフォルトである 縦 121.92 mm,横 162.56 mm は大きすぎることがわかります.
デフォルトを信じてはいけないのです 1 .
筆者は A4 2 段組論文では横 90 mm,縦 54mm とし,フォントサイズは 9 pt になるように設定しています.
図をソフト側で拡大縮小していじるのではなく,元の図を書くソフトの方を調整することを心がけましょう.
matplotlibrc の設定
figsize
や fontsize
といったパラメータを plt.plot(x, y)
のオプションで毎回指定するのは骨が折れます.
これらの設定は matplotlibrc にまとめられています.
matplotlibrc の設定を Python コード内で書き換えるには
- Python コード内で設定する
-
matplotlibrc
設定ファイルを配置する
ことで対応できます.
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['lines.linewidth'] = 2
plt.rcParams['lines.linestyle'] = '--'
data = np.random.randn(50)
plt.plot(data)
上記コードと同じディレクトリに matplotlibrc
というファイルを作り
lines.linewidth: 1.5
lines.linestyle: --
というテキストファイルを作成し
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(50)
plt.plot(data)
を実行すれば同じ結果が得られます.
自分で好きな設定ファイルを作成し,適当なディレクトリに配置して python コード内から呼び出すこともできます 2.
matplotlib 内でデフォルトので設計されている様々なスタイル は,内部的に異なる matplotlibrc ファイルを作成しそれを読み込むことで実現されています.
詳しくは 公式ページ を参照してください.
参考文献
matplotlib
-
Eitan Lees (@eitanlees) on Speaker Deck
- 非常に洗練されたスライドで matplotlib を使った可視化についてまとめている人
-
Ten simple rules for better figure
- タイトル邦訳:より良い図を作る 10 の簡単なルール
- 上のリンク内で紹介されている論文
-
rougier/scientific-visualization-book: An open access book on scientific visualization using python and matplotlib
- Matplotlib を使った可視化についてまとめた 200 ページ超の大作本
- 図をさらっと眺めるだけでも参考になる
-
【Python】matplotlib を使うならとりあえず読むべき記事 - Qiita
- matplotlib 関係のまとめ記事
プレゼンテーション
- 伝わるデザイン
- 高道慎之介先生:研究発表のためのプレゼンテーション技術
- プレゼンスライドがみるみる良くなる基本の推敲技術 -事例付き解説-
- 情報関連講習会 PowerPoint デザイン | 明治大学
- Use The CommKit : Broad Institute of MIT and Harvard