粗大メモ置き場

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

matplotlibを用いた作図テンプレート(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①

fig = plt.fgure(figsize=(10,10),dpi=200)
ax=fig.add_plot(1,2,1)
plt.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