Python matplotlibでの「TK_GetPixmap in TKImgPhotoInstanceSetSizeでpixmapを作成できない」エラーの解決方法
問題
import matplotlib.pyplot as plt
import numpy as np
for i in range(400):
fig = plt.figure(figsize=(12, 12))
plt.plot(np.random.rand(10))
plt.savefig("./plt_test/no_%d" %i)
print("test_%d" %i)
上のようにPythonでmatplotlib.pyplot
を使ってグラフを描いて、それを保存するコードを実行しているとしよう。369番目のfigureを生成する瞬間、出力ウィンドウで次のようなエラーが発生する。
test_366
test_367
test_368
Fail to create pixmap with TK_GetPixmap in TKImgPhotoInstanceSetSize
これはColabで実行する時には現れないが、ローカルで実行する時だけに現れる。常に369番目でエラーが出るため、figureを多く生成したことが原因だと思われるが、plt.close()
を使って毎回ウィンドウを閉じてもこのエラーは解決されない。ウィンドウを閉じるかどうかに関係なく、369番目のfigureを作ることが不可能なようだ。
解決
それなら解決法は簡単だ。下のようにfigureを生成する部分をfor文の外に出して、figureを一度だけ生成する。そして、その上でグラフを描いたり消したりを繰り返せば、上のエラーは発生しない。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(12, 12))
for i in range(400):
plt.plot(np.random.rand(10))
plt.savefig("./plt_test/no_%d" %i)
plt.clf()
print("test_%d" %i)
環境
- OS: Windows10
- Version: Python 3.9.2, matplotlib 3.4.2