粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

matplotlibを用いたfigure書き出しテンプレート(PDF図)

より良い記法をみつけ次第更新。こだわりポイントがある人はコメントで教えてください。

結論

折れ線プロット

PDFでplotをきれいに吐きたいならとりあえずこれ。

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

x = np.arange(0,10,0.5)
y = np.sin(x)

# plot template
fig = plt.figure(figsize=(5,4),dpi=80)
plt.plot(x,y,'-*',label='this is used for legend')
plt.grid()
plt.rcParams['font.family'] = 'Arial'
plt.title('Title above')
plt.ylabel('ylabel')
plt.xlabel('Time [s]')
plt.legend(loc='best', borderaxespad=0, fontsize=12)
plt.show()

# Save figure as PDF
pp = PdfPages('pdf_test.pdf')
pp.savefig(fig)
pp.close()

f:id:ossyaritoori:20191001093233p:plain
結果。 Legendは変な位置に行くならnortheastとかのほうがよいかも。

写真とplotを重ねる

写真と重ねたplotはベクターにする意義が薄いがまぁ統一するならPDFか。

fig = plt.figure(figsize=(10,10),dpi=200)

# Image Plot
img = plt.imread(’Filename’)
plt.imshow(img)
plt.grid()
# Scatter Plot
plt.scatter(ConvertedX,ConvertedY,c=color_code)
plt.colorbar()
plt.xlabel('longitude')
plt.ylabel('lattitude')

個々の機能について

Font変更

Times New Roman教の方はこちらから。 matplotlib のフォントはデフォルトで Bitstream Vera Sansですが,ArialやNew Romanなどがいい人は以下のように変更すればいいと思います。

自分用メモ: matplotlibを使ったグラフの調整 - Qiita

plt.rcParams['font.family'] = 'Arial'
#plt.rcParams['font.family'] = 'Times New Roman'

figureのサイズなどをいじる

plt.figure()の中身をいじればfigureのレイアウトや解像度を指定可能。

fig = plt.figure(figsize=(5,4),dpi=80)

PDFにエクスポート

多用するなら関数化しても良いかも。なお,ただの画像ならplt.savefig('figure.png')でOK。

from matplotlib.backends.backend_pdf import PdfPages

def savefigPDF(fig,filename):
    pp = PdfPages(filename)
    pp.savefig(fig)
    pp.close()

subplotを用いたplot

subplotの場合,plt.~~ で設定していた箇所が ax.set_~~になる。書き方も面倒になるし複数の図を整列したいなどの需要がない限り封印安定。

img = plt.imread("Map3forsave.png")
fig, ax = plt.subplots(1, 2,figsize=(10,10),dpi=200)
ax[0].imshow(img)
ax[1].scatter(sigpos_img[:,0],sigpos_img[:,1],c=signal_freq)
ax[0].set_xlabel()
ax[0].set_ylabel()
ax[0].set_title()

参考サイト

https://shimolab01.blogspot.com/2018/02/matplotlibpdf.htmlshimolab01.blogspot.com

qiita.com