파이썬 matplotlib.pyplot에서 Fail to create pixmap with TK_GetPixmap in TKImgPhotoInstanceSetSize 오류 해결하는 법

파이썬 matplotlib.pyplot에서 Fail to create pixmap with TK_GetPixmap in TKImgPhotoInstanceSetSize 오류 해결하는 법

solution for 'Fail to create pixmap with TK_GetPixmap in TKImgPhotoInstanceSetSize' error

문제

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)

위와 같이 파이썬에서 matplotlib.pyplot로 그래프를 그려서 그것을 저장하는 코드를 실행중이라고 해보자. 369번째 figure를 생성하는 순간 출력창에서 다음과 같은 오류가 난다.

test_366
test_367
test_368
Fail to create pixmap with TK_GetPixmap in TKImgPhotoInstanceSetSize

이는 Colob에서 실행할 때는 나타나지 않고 로컬에서 실행할 때만 등장한다. 항상 369번째에서 에러가 나기 때문에 figure를 너무 많이 생성한 것이 원인이라 생각되지만, plt.close()를 써서 매번 창을 닫아도 이 오류는 해결되지 않는다. 창을 닫고 말고와는 상관없이 figure를 369번 만드는 것이 불가능한 것으로 보인다.

해결

그렇다면 해결 방법은 간단하다. 아래와 같이 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
댓글