본문 바로가기

Programming/Python

[파이썬 에러] UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

반응형

나는 conda 로 각기 다른 코드를 각기 다른 환경에서 실행한다.

그런데 어떤 깃허브로 받아서 돌리던 코드에서 모델의 중간 feature 를 시각화 하고 싶어서 matplotlib 를 이용하여 plt.show()를 했으나 다음과 같은 에러가 발생했다.

UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
  plt.show()

 

다른 사이트들을 참고하여 이 문제를 해결하려고 했으나 사이트에서 언급한 바에 따르면 "가상환경 라이브러리의 의존성 문제" 가 원인인듯 했고 이를 해결하기 위해 이 라이브러리를 설치해라.. 이걸 저렇게 바꿔라 등등의 솔루션이 나왔지만 해봐도 문제가 해결되지 않거나 상당히 귀찮아 보여서 시도하기가 꺼려졌다.

 

그 와중에 얻은 나름의 차선책이 있어 여기에 공유한다.

 

내가 원래 의도하던것은 코드가 돌아가는 중에 매번 화면에 띄워가면서 (plt.show()이용) 시각화를 하는것이었지만 plt.show()가 안된다면 그저 시각화한 이미지를 컴퓨터에 저장하면 그만이다.

# figure 세팅
fig = plt.figure(figsize=(24, 6))
ax = fig.add_subplot(131)
ax2 = fig.add_subplot(132)
ax3 = fig.add_subplot(133)

# feature map plotting
# fmap1 : [B, C, Length]
ax.imshow(fmap1[0].detach().cpu().numpy(), cmap='jet')
ax2.imshow(fmap2[0].detach().cpu().numpy(), cmap='jet')
ax3.imshow(fmap3[0].detach().cpu().numpy(), cmap='jet')

# 저장경로 설정 및 저장
os.makedirs('./vis', exist_ok=True)
file_name = str(self.cnt) + '.png'
file_name = os.path.join('./vis', file_name)
fig.savefig(file_name, bbox_inches='tight')

 

 

반응형