5

私のコードでは、定期的にグラフを作成し、そのグラフをファイルに保存しようとしています。コードは次のようになります。

import pylab as p

def simpledist(speclist,totalbugs,a):
    data = [float(spec.pop)/float(totalbugs) for spec in speclist]
    p.hist(data)
    p.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png')

aカウンターです)

ただし、これを行うと、作成された新しいプロットはそれぞれ、以前のプロットにオーバーレイされ続けます。フィギュアを保存したら、新しいフィギュアを開始したいことをどのように知らせることができますか?

4

3 に答える 3

8

プロットをクリアするには、p.clf

def simpledist(speclist,totalbugs,a):
    data = [float(spec.pop)/float(totalbugs) for spec in speclist]
    p.clf()
    p.hist(data)
    p.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png')

pそれがmatplotlib.pyplotまたはインスタンスであると仮定すると、 figure@bernieが言うことも-それもうまくいくでしょう。

@ヤンのコメント

タイトルや軸ラベルなどをすでに設定している場合は、これらの設定がすべて無効になります。彼が言うようにしてやってみるほうがいいでしょう

 p.gca().cla()

あなたのハードワークを維持するために。ヤンありがとう!

于 2013-03-06T17:25:42.433 に答える
2

編集:パフォーマンスの観点から、ダノドノバンの答えはこれよりもおそらく好ましいでしょう。


p作成方法は示されていませんが、次のようなものだと思います。

import matplotlib.pyplot as plt
p = plt.figure()

その場合は、毎回新しいフィギュアを作成する必要があります。例:

def simpledist(speclist,totalbugs,a):
    data = [float(spec.pop)/float(totalbugs) for spec in speclist]
    p = plt.figure() # let's have a new figure why don't we 
    p.hist(data)
    p.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png')
于 2013-03-06T17:25:57.257 に答える
2

holdオフにすることもできます(doc)

import pylab as p
ax = p.gca()
ax.hold(False)

def simpledist(speclist,totalbugs,a):
    data = [float(spec.pop)/float(totalbugs) for spec in speclist]
    ax.hist(data)
    ax.figure.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png')

これにより、新しいプロットを追加するたびに軸がクリアされます。

他のアーティストがたくさんいて、最新のアーティストだけを削除したい場合はremove、アーティストのインスタンス関数を使用できます。

import pylab as p
ax = p.gca()
# draw a bunch of stuff onto the axse

def simpledist(speclist,totalbugs,a):
    data = [float(spec.pop)/float(totalbugs) for spec in speclist]
    n, bins, h_art = ax.hist(data)
    ax.figure.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png')
    for ha in h_art:
        h_a.remove()
    # ax.figure.canvas.draw() # you might need this
于 2013-03-06T17:45:01.650 に答える