1

グラフを自動的に構築して保存するメインループを作成しようとしていますが、これは不可能であり、各グラフを個別に選択し、開いて表示し、手動で保存する必要があることがわかりました。プロセスを自動化する方法を知っている人はいますか。プログラムはcsvファイルを読み取り、引数で指定された行からグラフを生成します.heresは以下のコードで、どこが間違っているのかわかりません。

import matplotlib.pyplot as plt
import sys, csv, math

def main():
     readAndChart('8to2Ant10Average', 0,1,2, '8to2Ant10: cumulative ethnic and political attacks')
     readAndChart('8to2Ant10Average',0,8,9, '8to2Ant10: ethnic and political attacks per turn')
     readAndChart('8to2Ant10Average',0,11,12, '8to2Ant10: ethnic and political attacks as a percentage of total attacks')

def roundUp(x,y):
    roun = int(math.ceil(x/y))    
    k = int(roun*y)
    return k

def readAndChart(readTitle, r1,r2,r3, graphTitle):
    time = []
    data1 = []
    data2 = []
    data3 = []
    data4 = []
    read = csv.reader(open(readTitle + '.csv', 'rb'))
    legend1 = ''
    legend2 = ''

    for row in read:
        if row[0] == 'turn':
            legend1 = row[r2] 
            legend2 = row[r3]

        if row[0] != 'turn':
            a = row[r1]            
            b = row[r2]
            c = row[r3]

            a = float(a); b = float(b); c = float(c)
            time.append(a)
            data1.append(b)
            data2.append(c)

    axese = []  
    mt = max(time)
    mph = max(data1)
    mpd = max(data2)

    axese.append(mph)
    axese.append(mpd)

    ax = max(axese)
    print ax
    if ax < 10 and ax > 1:
        k = roundUp(ax, 10.0)

        plt.axis([0,mt, 0, k])
    if ax < 100 and ax > 10:
        k = roundUp(ax, 10.0)
        plt.axis([0,mt, 0, k])
    if ax < 1000 and ax > 100:
        k = roundUp(ax, 100.0)
        plt.axis([0,mt, 0, k])
    if ax < 10000 and ax > 1000:
        k = roundUp(ax, 500.0)        
        plt.axis([0,mt, 0, k])

    plt.xlabel('generation')
    plt.ylabel('fequency')
    plt.title(graphTitle)
    plt.plot(time, data1, 'r' )
    plt.plot(time, data2, 'b')

    plt.legend((legend1, legend2),'upper center', shadow=True, fancybox=True)
    plt.savefig(graphTitle + '.png')

if __name__=='__main__': main()  
4

1 に答える 1

5

問題 1 :
Windows を使用しているようです。Windows では、ファイル名に
コロン ( ) を入れることはできません。 上記のサポートへの参照: http://support.microsoft.com/kb/289627:

*nix を使用している場合でも、ファイル名にコロンを使用しないことをお勧めします。一部のソフトウェアではコロンを適切に処理できない場合があるためです。

簡単な修正:

plt.savefig(graphTitle.replace(':','') + '.png')

問題 2 :
コメントで述べたように、保存後に Figure をクリアする必要もあります。
例:

plt.savefig(graphTitle.replace(':','') + '.png')
plt.clf()
plt.cla()

または多分単に:

plt.savefig(graphTitle.replace(':','') + '.png')
plt.close() # call w/ no args to close current figure
于 2012-05-25T19:53:21.053 に答える