web-dev-qa-db-ja.com

Matplotlib Savefigは古いファイルを上書きしません

これは、私のマシンでの権限の問題のようです。 Windows 10でシステムを更新した後、実行すると:

import matplotlib.pyplot as plt
#make figure
plt.plot([1,2,3,4])
plt.ylabel('some numbers')

#save
plt.savefig("./figs/my_plot.jpg")

初めてコードが実行されるときに、図が作成されます。コードを変更して(ラベルを変更するなど)再実行すると、Jupyter Notebookに表示されるプロットが更新されますが、マシンに保存されたファイルは更新されません!これは、システムアップデートがプッシュされた後の今日の新しい問題であり、これが原因の可能性があります。変更が加えられるたびに新しいファイル名を作成する以外に、この問題を修正するための洞察はありますか?

10
EHB

それは単純で愚かかもしれませんが、私は次のことをするだけです:

import os
import matplotlib.pyplot as plt
#make figure
plt.plot([1,2,3,4])
plt.ylabel('some numbers')

#save
strFile = "./figs/my_plot.jpg"
if os.path.isfile(strFile):
   os.remove(strFile)   # Opt.: os.system("rm "+strFile)
plt.savefig(strFile)

システムコマンドラインとして直接「rm」を使用するのは非常に難しいかもしれませんが、それに似た他のオプションを使用できます。

しかし正直なところ、matplotlibがファイルを上書きしないのは奇妙です。

[〜#〜]編集[〜#〜]

Windowsを使用しているようですので、UNIXでは「rm」の代わりに削除コマンドラインとして「del」を使用できます。

6
iblasi

2015年10月2日のJonの答えは私にとってはトリックでした。 https://superuser.com/questions/147525/what-is-the-date-column-in-windows-7-Explorer-it-matches-no-date-column-from/335901#335901

基本的に、Windowsはフォルダー内の多数の画像を検出し、そのフォルダーを画像用に「最適化」します。つまり、表示される列は、ドキュメントに対して「最適化」されたフォルダーの場合と同様に、更新日ではなく日付です。日付は、作成日と変更日のうち早い方を取ります。 matplotlib .savefigがファイルを上書きしても、作成日は変更されないため、日付列は変更されません。

この問題を解決するために、ドキュメント用のフォルダーをカスタマイズしました。これを行うには、フォルダを選択してプロパティウィンドウを開きます。 [カスタマイズ]タブに移動し、[このフォルダを最適化する]でドキュメントを選択します。

11
bbade

「plt.close()」を追加するだけです

plt.savefig("./figs/my_plot.jpg")
plt.close()