2016-08-16 5 views
0

コードループ内に一連のイメージを印刷しようとしています。最終的には、システムがどのように時間とともに変化するかを示すために約1000を印刷する必要があります。私はMatplotlib runs out of memory when plotting in a loopで概説されている方法を見直しましたが、コードで96以上の画像を生成することはできません。ループ内の図をプロットするときのPythonメモリ

私はその取り除か形で使用していたコードは

for loop1 in range(0,10): 
    for loop2 in range(0,100): 
     saveName = 'Test_Images/' + str(loop1) + '_' + str(loop2) + '.png'   
     plotHeatMap(saveName,'Test','X','Y',-35,35,141,-30,30,121,Z) 

以上がメモリを解放していない理由は上の任意のアドバイスの下に示すように、これは単純なループで使用されている

import numpy as np 
import matplotlib as mpl 
import os 
def pltHM(graphname,graphtext,xAxis,yAxis,xMn,xMx,xCnt,yMn,yMx,yCnt,TCrt):  
    plt = mpl.pyplot  
    fig = plt.figure(figsize=(8,7), dpi=250) 
    cmap = mpl.cm.jet 
    norm = mpl.colors.Normalize(vmin=-3, vmax=3)   
    X = np.linspace(xMn,xMx,xCnt) 
    Y = np.linspace(yMn,yMx,yCnt) 
    plt.xlabel(xAxis) 
    plt.ylabel(yAxis) 
    plt.pcolormesh(X,Y,TCrt, cmap=cmap,norm=norm) 
    plt.grid(color='w') 
    plt.suptitle(graphtext, fontsize=14) 
    plt.colorbar() 
    plt.savefig(graphname, transparent = True) 
    plt.cla() 
    plt.clf()  
    plt.close(fig) 
    del plt  
    del fig 
    return 

を下回っていますトレースバックメッセージを引き起こします。

RuntimeError:イメージにメモリを割り当てられませんでした。

何か助けてくれてありがとうございました

+1

ヒント:ループの中に新しい人物を作る必要はありません。フィギュアを一度*作成し、ループ内で*プロットを更新して保存します。また、毎回pyplotを再定義しています。 **これをしないでください**あなたは一度だけ必要です。一番上に 'import matplotlib.pyplot as plt'を実行し、' plt = mpl.pyplot'面白いビジネスを取り除いてください。 – Ajean

+0

多くのありがとうございます。私はそれを取り除き、キャンバスの描画にパスの提案を使用しました。今働いている。多くのお礼ありがとうございます。 – ultimatejo

答えて

1

ここではできることの一例を取り上げます。 Ajeanが指摘しているように、毎回pltをインポートしないでください!一度は十分です。また、図を削除せずに新しい図を作成しないでください...同じ図を使用してデータを置き換える方が良いです。

import numpy as np 
import matplotlib.pyplot as plt 

def plotHeatMap(fig, line, x, y, graphname): 
    line.set_data(x, y) 
    fig.canvas.draw() 
    fig.savefig(graphname) 

fig1, ax1 = plt.subplots(1, 1) 
line, = ax1.plot([],[]) 
ax1.set_xlim(0, 1) 
ax1.set_ylim(0, 1) 
for loop1 in range(0, 2): 
    for loop2 in range(0, 2): 
     x = np.random.random(100) 
     y = np.random.random(100) 
     save_name = 'fig_'+str(loop1) + '_' + str(loop2) + '.png' 
     plotHeatMap(fig1, line, x, y, save_name) 
+0

アドバイスいただきありがとうございます。キャンバス上に再描画するように設定して、現在作業中です。それはまた、より速く、完了するようになりました。私は本当にあなたの助けに感謝します。 – ultimatejo

関連する問題