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 답변
-
문제는 matplotlib가 x기반의 벡엔드를 기본값으로 사용한다는 점입니다. 저도 제 서버에서 같은 문제를 갖고 있었습니다. 제가 사용한 해결책은 아래의 코드를 다른 pylab / matplotlib / pyplot 모듈이 import되기 전에 아래의 코드를 추가하는 것 입니다.
import matplotlib # Force matplotlib to not use any Xwindows backend. matplotlib.use('Agg')
다른 방법은 .matplotlibrc에 설정하는 방법입니다.
댓글 입력