1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonでプロットといえばmatplotlibというモジュールが有名。
Matlab的なプロットをだいたいやってくれるモジュール。

Matlabではプロットをファイルに保存するときはprint()を使うが
matplotlibでは基本的には matplotlib.pyplot.savefig()を使う

また、複数のプロットを複数ページのPDFにまとめる、というのはMatlabでは(たぶん)できないのだが(たしかpsではできた気がする)
matplotlibにはmatplotlib.backends.backend_pdf.PdfPages()というのがあり、これで簡単にできる。

他にも、Matlabではpagesizeを設定しないとfigureの画面とPDFで余白とかに差ができるのだが
matplotlibではfigsizeで指定した大きさでPDFが出てくるので直感的だと思う(個人的な意見だけど)

#例: in Matlab

fig = figure()
x = normrnd(0, 1, 100);
y = normrnd(0, 1, 100);
plot(x, y, '.')
print(fig, '~/Desktop/example.png', '-dpng', '-r300')
print(fig, '~/Desktop/example.pdf', '-dpdf')

Matlabの場合、保存形式は'-dpng'とか'-dpdf'とかのオプションで指定。

#例: in Python

import os

import matplotlib.pyplot as plt
import numpy as np

x = np.random.normal(size=100)
y = np.random.normal(size=100)

fig, ax = plt.subplots()
ax.scatter(x, y)

plt.savefig(os.path.expanduser('~/Desktop/example.png'), dpi=300)
plt.savefig(os.path.expanduser('~/Desktop/example.pdf'))

複数ページのPDFを作りたい場合

import os

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages

pdf = PdfPages(os.path.expanduser('~/Desktop/example.pdf'))
for n in range(3):
    x = np.random.normal(size=100)
    y = np.random.normal(size=100)

    fig, ax = plt.subplots()
    ax.scatter(x, y)
    pdf.savefig()

pdf.close()

と、言う感じでPdfPagesオブジェクトのsavefigメソッドを呼ぶとactive figureが末尾に追加されていく。

PdfPages.savefig(figure) と引数を指定すると、どのfigureを保存するかも選べる
これを使うとプロットするときにfigをリストにでも入れておいて、まとめて保存するとか

figs = []
for n in range(3):
    x = np.random.normal(size=100)
    y = np.random.normal(size=100)

    fig, ax = plt.subplots()
    ax.scatter(x, y)
    figs.append(fig)

pdf = PdfPages(os.path.expanduser('~/Desktop/example.pdf'))
for fig in figs:
    pdf.savefig(fig)
pdf.close()

プロットしたあとで、pyplot.get_fignums()で開いているfigureを全部取ってきて保存するとか

for n in range(3):
    x = np.random.normal(size=100)
    y = np.random.normal(size=100)

    fig, ax = plt.subplots()
    ax.scatter(x, y)

pdf = PdfPages(os.path.expanduser('~/Desktop/example.pdf'))
for fig in plt.get_fignums():
    pdf.savefig(fig)
pdf.close()

といったこともできる。

冒頭で触れたpapersizeの話とかも含めて、PDFに書き出すという点ではmatplotlibの方がMatlabより便利。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?