Subscribed unsubscribe Subscribe Subscribe

stuff

あれこれ

matplotlib: 画像サイズの設定 と 保存

matplotlib でグラフ描画 → ベクター形式で保存 → イラレで編集 という流れで作業を進めることが多い。つまり、matplotlib で厳密な修飾はしなくていいものの、サイズの大きさが毎回あってるというだけでイラレでの編集が簡単になる。そこでサイズの変え方と保存方法について学ぶことにする

まず Figure size & dpi の確認

画像サイズの初期設定は以下から確認

import matplotlib.pyplot as plt

# make fig & plot
fig, ax = plt.subplots()
ax.plot((1,2),(1,2))

dpi = fig.get_dpi()
size = fig.get_size_inches()
print "DPI: %i" % dpi
print "Size in inches: %.2f x %.2f" % (size[0], size[1])
print "Pixels: %i x %i" % (dpi * size[0], dpi * size[1])

私は 80 dpi, 8 x 6 inch であった。初期設定を変えたい場合は ~/.matplotlib/matplotlibrc 内の figure.figsizefigure.dpi を変えればいい。

Figure size & dpi を設定する方法

import matplotlib.pyplot as plt

# 1) Fig 作成時に指定する
plt.figure(figsize=(8,6), dpi=100)    # 8 inch x 6 inch, 100 dpi

# 2) Fig 作成時に指定するやり方その2:subplotsを使う。一番便利?
fig, ax = plt.subplots(figsize=(3, 3), dpi=100)

# 3) あとから指定もできる
fig2 = matplotlib.pyplot.gcf()     # figハンドルを指定してない場合
fig2.set_size_inches(18.5, 10.5)
fig2.set_dpi(100)

画像の形式を指定して保存

import matplotlib.pyplot as plt

# make fig & plot
fig, ax = plt.subplots()
ax.plot((1,2),(1,2))

# 保存のときに、ファイル名の拡張子によってファイル形式を指定する
fig.savefig('test.pdf', transparent=True)
fig.savefig('test.png', dpi=300)  # savefig で dpiも指定できるけど、上記で fig 作成時にやってもok
  • ラスター形式:png
  • ベクター形式:pdf, ps, eps and svg …らしいが、私が eps と ps を指定するとファイルが壊れている。なぜ?
    • pdf がベスト。イラレでも編集しやすい。
    • svg の場合、デフォルトだとテキストがアウトライン化される。 ~/.matplotlib/matplotlibrcファイル(なければ作る)の svg.fonttypenone に変えればテキストデータとして保存される。ただしウェブ上で使う場合などブラウザなどによっては開けなくなるので気をつける。基本的に使わなくていい。
    • transparent=True とすれば、Fig, Axes, Axis などの背景が全て透明になる。

テキストの設定

1) テキストをイラレで編集できるようにする

  • matplotlib のデフォルトだと Type 3 font とやらに指定されているのだが、イラレで開くとアウトライン化されてしまう。テキストとして読み込むには True Type font に変える必要がある。そこで ~/.matplotlib/matplotlibrcファイル(なければ作る)の pdf.fonttypeps.fonttype42 にすれば ok… 42 は TrueType のことらしい (The answer to Life the Universe and Everything)

2) フォントを変える

  • これも初期設定だとDejaVu Sans, Bitstream Vera Sansなどになっていて、イラレにフォントがないのでエラーがでてウザイ。そこでmatplotlibrcfont.sans-serif の一番最初に Arial などをもってくることで回避。
  • でも残念なことに Helvetica が使えない; mac OSX では Helvetica は dfont としてインストールされており、これを TrueType に変えることで matplotlib 出力として使えるようになる。でもべつにそこまでしなくても Arial でいい。

3) 最適なフォントサイズ?

  • 論文の場合 6-8 pt にしろと言われる
  • プレゼンの場合大事じゃない数字は12 pt くらい、大事な数字/ラベルは 20-30 pt
  • matplotlibの初期設定は 10 pt くらいなのでまあちょうどいい(変えるならば matplotlibrc など)

発表や資料作成に最適なサイズ?

サイズ

  • A4 や Letter の横幅が約 8.5 inch
    • グラフは3 inch くらいがちょうどいい
  • PPT の標準スライドは 10x7.5 inch
    • 巨大グラフならば 8x6 inch
    • 小さめなグラフならば 3x3 inch

f:id:yashima1:20170215112510p:plain:h150 f:id:yashima1:20170215112647p:plain:h150

DPI/PPI (pngの場合)

  • 印刷の場合は 300 dpi
  • スクリーンの場合は 100 dpi で十分
    • macbook pro 15 inch は 220 ppi
    • プレゼンに使う 80 inch 巨大スクリーンも <100 ppi のものが多い