파이썬 matplotlib에서 Fail to create pixmap with TK_GetPixmap in TKImgPhotoInstanceSetSize 오류 해결하는 법
문제
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