物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Python+matplotlibでA4の方眼紙風PDFを作る

グリッド間隔、線の種類、線の幅、線の色、用紙サイズは自由に設定できるようにした。

要点は次の3つ

  • plt.subplots_adjust()で枠線の外側をなくしてfigureを紙面全体にする
  • plt.gca().axis("off") で枠線、目盛り、目盛りラベルを消す
  • plt.plot(transform=plt.gcf().transFigure)でfigureに対して相対位置で線を引く

コード全体

import matplotlib.pyplot as plt

grid = 5 # グリッド間隔 [mm]
linestyle = "-"
linewidth = 0.1
color = "cyan"

inch2mm = 25.4
w_inch = 210/inch2mm #横の長さ [mm]
h_inch = 297/inch2mm #縦の長さ [mm]
grid_inch = grid/inch2mm

plt.figure(figsize=(w_inch, h_inch))
plt.subplots_adjust(top=1, bottom=0, left=0, right=1) #枠線の外側をなくす
plt.gca().axis("off") #枠線、目盛り、目盛りラベルを消す

#縦線
ncol = int(w_inch/grid_inch)+1
grid_col = grid_inch/w_inch
for col in range(ncol):
    plt.plot([col*grid_col,col*grid_col],[0,1],
             color=color,linewidth=linewidth,linestyle=linestyle,
             transform=plt.gcf().transFigure)

#横線
nrow = int(h_inch/grid_inch)+1
grid_row = grid_inch/h_inch
for row in range(nrow):
    plt.plot([0,1],[row*grid_row,row*grid_row],
             color=color,linewidth=linewidth,linestyle=linestyle,
             transform=plt.gcf().transFigure)

plt.savefig("grid.pdf")
plt.show()

実際のサイズで印刷すると、印刷精度でほぼ正確に方眼紙が作れるはずである。