Generating a PNG with matplotlib when DISPLAY is undefined


파이썬에서 NetworkX를 사용하려 합니다. 아래의 프로그램을 실행하면 이와 같은 에러가 발생하네요. 혹시 제가 놓친 부분이 있나요?

#!/usr/bin/env python

import networkx as nx
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt

G=nx.Graph()
G.add_node(1)
G.add_nodes_from([2,3,4,5,6,7,8,9,10])
#nx.draw_graphviz(G)
#nx_write_dot(G, 'node.png')
nx.draw(G)
plt.savefig("/var/www/node.png")


Traceback (most recent call last):
  File "graph.py", line 13, in <module>
    nx.draw(G)
  File "/usr/lib/pymodules/python2.5/networkx/drawing/nx_pylab.py", line 124, in draw
    cf=pylab.gcf()
  File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 276, in gcf
    return figure()
  File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 254, in figure
    **kwargs)
  File "/usr/lib/pymodules/python2.5/matplotlib/backends/backend_tkagg.py", line 90, in new_figure_manager
    window = Tk.Tk()
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1650, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
  • 2016년 06월 13일에 작성됨

조회수 122


1 답변


좋아요
0
싫어요
채택취소하기

문제는 matplotlib가 x기반의 벡엔드를 기본값으로 사용한다는 점입니다. 저도 제 서버에서 같은 문제를 갖고 있었습니다. 제가 사용한 해결책은 아래의 코드를 다른 pylab / matplotlib / pyplot 모듈이 import되기 전에 아래의 코드를 추가하는 것 입니다.

import matplotlib
# Force matplotlib to not use any Xwindows backend.
matplotlib.use('Agg')

다른 방법은 .matplotlibrc에 설정하는 방법입니다.

  • 2016년 06월 14일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close