1. ホーム
  2. matplotlib

[解決済み] pad_inches=0 と bbox_inches="tight" は、宣言された figsize よりも小さいプロットを作成します。

2022-02-12 19:04:06

質問

latexに埋め込む出版品質のプロットを作成していますが、サイズとフォントの点で非常に正確にしたいのです(プロットと同じサイズのフォントが論文にあるように)。latexでプロットが拡大縮小されないようにするために、正確なサイズにしたいのですが、できません。以下は私のコードです。

import matplotlib.pyplot as plt
from matplotlib import rc, rcParams
from numpy import sin

rc('text', usetex=True)
rc('font', family='serif', serif='Computer Modern Roman', size=8)
rc('legend', fontsize=10)

width_in = 5
fig = plt.figure(1, figsize=(width_in, 2))
ax = fig.add_subplot(111)
ax.plot(range(0,100), sin(range(0,100)))

fig.tight_layout()
fig.savefig('test.eps', bbox_inches='tight', pad_inches=0)
plt.close()

問題は bbox_inches='tight' と pad_inches=0 で、これらのオプションを追加すると、私のプロットは宣言した 5 インチではなく 4.76 インチの幅になってしまうのです。しかし、私はスペースを節約するために、これらのオプションが欲しいのです。では、どうすれば解決するのでしょうか?

編集:さて、回答は、以下のものを削除することを示唆しています。 bbox_inches='tight'pad_inches=0 を使用し tight_layout() . そうすると、画像は正しいサイズになりますが、周囲に白いパディングが残っています。私はそれを削除することができます fig.tight_layout(pad=0) しかし、その場合、図のタイトルがボックスの中に移動してしまい、見た目が悪くなってしまいます。一方、私は tight_layout(rect=[...]) しかし、数字を正しくするのは手作業で、私はそれが好きではありません。このように、現在のところ、私の問題に対する簡単で一般的な解決策は見当たりません。

どのように解決するのですか?

あなたが抱えている問題は bbox_inches='tight' は、図の周りの余分な空白をすべて取り除くだけで、レンダリング後に図の中の何かを実際に並べ替えることはありません。

に渡すパラメータを調整する必要があるかもしれません。 tight_layout ( チュートリアル ) を使って、希望の効果を得ることができます。

これで、正しい方向性が示されることを期待します。