Matplotlibを使用してFigureを作成しましたが、プロット軸を認識し、描画された線がズームアウトされます。
これを読んで 以前のディスカッションスレッド で、フィギュアサイズの設定方法を説明します。
fig, ax = plt.subplots()
fig.set_size_inches(3, 1.5)
plt.savefig(file.jpeg, edgecolor='black', dpi=400, facecolor='black', transparent=True)
上記のコード(簡潔にするために他の構成は削除されています)を使用すると、1200 X 600
の望ましいサイズ(解像度も言うべきですか?)および望ましいファイルサイズのイメージファイルが得られます。
投影された画像は通常とは異なる方法で縮小され、たとえば注釈が拡大されます。軸上のラベルのサイズを設定できますが、下と右のスパインが大きく、プロットされた線も大きいため、図はスケールに対して比例して見えません。
したがって、質問は、どの構成が間違っているのでしょうか?
フィギュアサイズ(figsize
)は、フィギュアのサイズをインチ単位で決定します。これにより、Axes(およびその他の要素)がFigure内に持つスペースの量が与えられます。デフォルトの図のサイズは、matplotlib 2で(6.4, 4.8)
インチです。図のサイズを大きくすると、長いテキスト、より多くの軸、またはより多くの目盛りラベルを表示できます。
インチあたりのドット数(dpi)は、図に含まれるピクセル数を決定します。 matplotlibのデフォルトdpiは100です。figsize=(w,h)
の図は
px, py = w*dpi, h*dpi # pixels
# e.g.
# 6.4 inches * 100 dpi = 640 pixels
そのため、ピクセルサイズが(1200,600)
図サイズとdpiのいくつかの組み合わせを選択できます。
figsize=(15,7.5), dpi= 80
figsize=(12,6) , dpi=100
figsize=( 8,4) , dpi=150
figsize=( 6,3) , dpi=200
etc.
さて、違いは何ですか?これは、Figure内の要素のサイズによって決まります。線、マーカー、テキストなどのほとんどの要素には、ポイント単位でサイズが指定されています。
Matplotlibの数字は、72インチあたりのポイント(ppi)を使用します。太さ1ポイントの線は1./72になります。インチ幅。フォントサイズが12ポイントのテキストは、12/72になります。インチ高。
もちろん、図のサイズをインチ単位で変更しても、ポイントは変更されません。そのため、インチ単位の大きな図でも要素のサイズは変わりません。 したがって、フィギュアのサイズを変更することは、異なるサイズの紙を撮るようなものです。そうすることで、もちろん同じペンで描かれた線の幅は変わりません。
一方、dpiを変更すると、これらの要素がスケーリングされます。 72 dpiでは、1ポイントサイズの線は1ピクセルの強さです。 144 dpiの場合、この線の強度は2ピクセルです。 したがって、より大きいdpiは虫眼鏡のように機能します。すべての要素は、レンズの倍率によってスケーリングされます。
一定の図サイズとさまざまなdpiの比較は、左の図に示されています。右側には、一定のdpiとさまざまなFigureサイズが表示されます。各行の図のピクセルサイズは同じです。
再現するコード:
import matplotlib.pyplot as plt
%matplotlib inline
def plot(fs,dpi):
fig, ax=plt.subplots(figsize=fs, dpi=dpi)
ax.set_title("Figsize: {}, dpi: {}".format(fs,dpi))
ax.plot([2,4,1,5], label="Label")
ax.legend()
figsize=(2,2)
for i in range(1,4):
plot(figsize, i*72)
dpi=72
for i in [2,4,6]:
plot((i,i), dpi)