1

現在、次のようなコードがあります。

import os
import numpy as np
import pylab 

import matplotlib.pyplot as plt
import matplotlib.cm as cm    
from matplotlib.patches import Polygon  
import numpy as np

...

# Read my image
img = matplotlib.image.imread(p_image)

# Render it, move the coordinates' origin to the upper left corner
plt.imshow(np.flipud(img), cmap=cm.Greys_r,origin='upper')

# Overlay a polygon
p = Polygon( zip(xs,ys), alpha=0.2)
plt.gca().add_artist(p)

# Save it to disk
plt.savefig(p_image_output)

最初に画面にレンダリングせずに、この図をディスクに直接保存するにはどうすればよいですか? ( に渡す 3 つの引数で指定されたプロパティを Figure に保持させたいことに注意してくださいimshow)

4

2 に答える 2

2

1つの方法は、matplotlibインタラクティブなサポートなしでバックエンドを何かに設定することです。標準的な方法は、次の他の部分の使用またはインポートを開始する前に、次の行を挿入することですmatplotlib

import matplotlib
matplotlib.use('Agg')

標準のバックエンドはですTkAgg。これは、Tkインタラクティブイベントループで「agg」(「アンチグレインジオメトリ」)レンダリングを使用します。を使用Aggすると、同じタイプの図のレンダリングが実行されますが、画面には何も表示されません。

バックエンドを変更すると、matplotlib元に戻せなくなる場合があることに注意してください。したがって、このスクリプトで画面に何もプロットしたくないことがわかっている場合は、これが最適に機能します。

于 2012-11-27T00:49:07.597 に答える
2

を使用していない限り、またはipython --pylabを実行した場合にのみ図が画面に表示されます。画面に表示したくない場合は、これらの呼び出しを行っていないことを確認してください。show()draw()

または、matplotlibで非対話型バックエンドを使用することもできます。たとえば、Aggバックエンド。~/.matplotlib/matplotlibrcファイルに次のセットがあることを確認してください。

backend      : Agg

このバックエンドを使用すると、画面に何も表示されないことに注意してください。を使用する場合は、特定のバックエンドipythonで呼び出すことにより、構成ファイルを保持し、インタラクティブなバックエンドを使用できます--pylab。例えば:

ipython --pylab=qt
于 2012-11-27T00:49:28.497 に答える