Generating a PNG with matplotlib when DISPLAY is undefined

조회수 1394회

파이썬에서 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

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

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

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

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)