logo

Python matplotlibでの「TK_GetPixmap in TKImgPhotoInstanceSetSizeでpixmapを作成できない」エラーの解決方法 📂プログラミング

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