4

プロットを matplotlib に表示しているときに、さまざまな寸法を使用して png として保存しようとしています。メインの図 (print_fig = fig) のコピーを作成してから、print_fig のサイズ (print_fig.set_size_inches(7,3)) を変更しています。ただし、これにより、print_fig だけでなく、元の図が変更されます。Figure オブジェクトを「複製」する方法はありますか?

私のコードは次のようになります。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)
ax.set_ylabel("y-label")

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend()
#change dimension of figure for print 
#clone fig displayed
print_fig = fig
print_fig.set_size_inches(7,3)
print_fig.savefig('print_fig.png')
plt.show()

これは私の画面がどのように見えるかです: ここに画像の説明を入力

4

2 に答える 2

1

異なる解像度で png を保存したい場合は、図のサイズを変更する必要はありません。dpiキーワード in で画像サイズを制御できますsavefig

を呼び出すsavefigと、デフォルトで rc が使用さsavefig.dpiれます (ファイルで確認できます.matplotlibrc。通常は 100 です)。したがって、出力ファイルの解像度を変更する場合は、必要な量だけ dpi をスケーリングします。

plt.savefig('myfig100.png', dpi=100)
plt.savefig('myfig50.png', dpi=50)

2 番目のものは、最初の半分の幅と高さになります。

幅と高さの比率を変更したい場合、もちろんこれは役に立ちません。あなたがしていることは、保存のために図の比率を変更する適切な方法です。しかし、ご覧のとおり、ウィンドウが変更されます。の後に他に何もプロットしない場合show()は、次の操作を実行できます。

  1. プロット呼び出しを行う
  2. 電話show()
  3. 行うfig.set_size_inches(7,3)
  4. 最後にあなたのsavefig()

このようにして、フィギュアにさらに変更を加えない限り、必要な寸法で保存でき、画面上のフィギュアはそれらの寸法に更新されません。

于 2013-01-16T07:56:32.483 に答える
0

ここにアイデアがあります: 一部の Matplotlib バックエンドは、私の記憶が正しければ (pdfバックエンドのように) 何も表示しないので、別のバックエンドに切り替えて、Figure のサイズを変更し (画面に表示されません)、保存することができます (その後、元のバックエンドに戻ります)。

ただし、このアイデアはテストしていません。バックエンドの切り替えはまだ実験段階です。でも試してみる価値はあるかもしれません。

于 2015-06-06T00:24:45.190 に答える