2016-04-09 166 views
0

私は6つの小さなリストを持つ1つの大きなリストを持っています。この6つの小さなリストは、スライス値として使用され、matplotlibを使用して円グラフを生成します。Python Matplotlib - forループを使用中に保存されたイメージが上書きされる

f_c = [[4, 1, 0, 1, 0], 
     [4, 1, 0, 1, 0], 
     [4, 1, 0, 1, 0], 
     [4, 0, 2, 0, 0], 
     [4, 0, 2, 0, 0], 
     [4, 1, 0, 0, 1]] 

私は今、ラベル

titles = ['Strongly Agree', 'Agree', 'Neutral', 
      'Disagree', 'Strongly Disagree'] 

を持っている別のリストを持って、私は、生成されたパイチャートを保存するためのループを使用しています。コードは以下の通りである:

for i, j in zip(f_c, lst): 
    pie(i, 
    labels=titles, 
    shadow=True) 
    savefig(j + '.png') 

「LST」ファイル名をしている、と円グラフを保存するために使用されたリストです。

私は円グラフを生成することができますが、グラフとラベルは上書きされています。最初の図形だけが正しく来て、残りの図形は上書きされています。私は手動ですべての数字が正しく生成されていたが、私はループに入れれば正しく保存されていない(上書きされている)。

Figure 1Figure 2Figure 3

何が問題かもしれません:生成された画像(のみ3)は、次のとおり?親切に私にこれを手伝ってください。私はmatplotlibを初めて使っています。

答えて

2

空のスレートから始めることを明確にするために、新しい図形を生成する前に、作業している図形をクリアすることをお勧めします。 "clear figure"の略であるplt.clf()でクリアします。

あなたの質問には直接関係しませんが、あなたがローカルに持っている他のメソッドを上書きする可能性があるので、from matplotlib import *を実行しないこともPythonの良い考えです。意味のある変数名を使うことも役に立ちます。このような

何かが動作します:

import matplotlib.pyplot as plt 
for fig, fig_name in zip(fig_data, fig_names): 
    plt.clf() 
    plt.pie(fig, labels=titles, shadow=True) 
    plt.savefig(fig_name + '.png') 
+0

はたぶん、あなたは 'plt.clfを配置したい()'ループの終わり?私はチェックしていませんが、 'clf()'を呼び出してクリアする数字がない場合はどうなりますか? –

+0

何も起こらず、空の図が消去されます。 – mprat

+0

@mpratありがとうございました。それは今私が望んでいるように私を与えている – Jeril

関連する問題