Python과 함께 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
이제 다른 오류가 발생합니다.
#!/usr/bin/env python
import networkx as nx
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
matplotlib.use('Agg')
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")
/usr/lib/pymodules/python2.5/matplotlib/__init__.py:835: UserWarning: This call to matplotlib.use() has no effect
because the the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
if warn: warnings.warn(_use_error_msg)
Traceback (most recent call last):
File "graph.py", line 15, in <module>
nx.draw(G)
File "/usr/lib/python2.5/site-packages/networkx-1.2.dev-py2.5.egg/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
이제 다른 오류가 발생합니다.
#!/usr/bin/env python
import networkx as nx
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
matplotlib.use('Agg')
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")
/usr/lib/pymodules/python2.5/matplotlib/__init__.py:835: UserWarning: This call to matplotlib.use() has no effect
because the the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
if warn: warnings.warn(_use_error_msg)
Traceback (most recent call last):
File "graph.py", line 15, in <module>
nx.draw(G)
File "/usr/lib/python2.5/site-packages/networkx-1.2.dev-py2.5.egg/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
답변
주요 문제는 (시스템에서) matplotlib가 기본적으로 x-using 백엔드를 선택한다는 것입니다. 내 서버 중 하나에서 동일한 문제가 발생했습니다. 나를위한 해결책은 다른 pylab / matplotlib / pyplot 가져 오기 전에 읽히는 곳에 다음 코드를 추가하는 것이 었습니다 .
import matplotlib
# Force matplotlib to not use any Xwindows backend.
matplotlib.use('Agg')
대안은 .matplotlibrc에 설정하는 것입니다
답변
Reinout의 답변을 보완하는 것과 같습니다.
이런 종류의 문제를 해결하는 영구적 인 방법은 .matplotlibrc 파일을 편집하는 것입니다. 통해 찾기
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
# This is the file location in Ubuntu
'/etc/matplotlibrc'
그런 다음 해당 파일의 백엔드를로 수정하십시오 backend : Agg
. 그게 다야.
답변
정답은 실행 환경을 올바르게 준비하는 데 약간의 시간이 걸립니다.
당신이 당신의 실행 환경을 준비해야 할 첫 번째 기술은 사용하는 matplotlibrc
파일 로 현명 크리스 Q. 추천을 설정,
backend : Agg
그 파일에. matplotlib가 파일을 찾고 찾는 방법과 위치를 코드 변경없이 제어 할 수도 있습니다.matplotlibrc
.
실행 환경을 준비해야하는 두 번째 기술은 MPLBACKEND
환경 변수 를 사용하고 사용자에게 환경 변수 를 사용하도록 알리는 것입니다.
export MPLBACKEND="agg"
python <program_using_matplotlib.py>
이 작업을 수행하기 위해 디스크에 다른 파일을 제공 할 필요가 없기 때문에 편리합니다. 예를 들어 지속적인 통합 테스트 및 디스플레이가없는 원격 컴퓨터에서 실행하는 등의 방법으로이 방법을 사용했습니다.
matplotlib 백엔드를 파이썬 코드에서 “Agg”로 하드 코딩하는 것은 큰 망치로 둥근 구멍에 사각형 페그를 강타하는 것과 같습니다. 대신 matplotlib에 사각형 구멍이 필요하다고 말할 수 있습니다.
답변
Spark를 통해 matplotlib를 사용하는 동안 오류가 발생했습니다. matplotlib.use('Agg')
나를 위해 작동하지 않습니다. 결국 다음 코드가 저에게 효과적입니다. 여기 더
import matplotlib.pyplot as plt.
plt.switch_backend('agg')
답변
@Ivo Bosticky가 말한 것을 간과 할 수 있습니다. 이 줄을 py 파일 의 매우 시작 부분에 넣으십시오 .
import matplotlib
matplotlib.use('Agg')
아니면 오류가 발생합니다
* / usr / lib / pymodules / python2.7 / matplotlib / __ init__.py:923 : UserWarning : matplotlib.use ()에 대한이 호출은 효과가 없습니다. 백엔드가 이미 선택 되었기 때문에; matplotlib.use ()는 * pylab, matplotlib.pyplot, * 전에 호출되어야합니다. *
모든 디스플레이 문제가 해결됩니다.
답변
X와 no-X 환경 사이를 전환 할 때이 스 니펫이 잘 작동한다는 것을 알았습니다.
import os
import matplotlib as mpl
if os.environ.get('DISPLAY','') == '':
print('no display found. Using non-interactive Agg backend')
mpl.use('Agg')
import matplotlib.pyplot as plt
답변
코드를 실행하기 위해 서버에 로그인 할 때 대신 다음을 사용하십시오.
ssh -X username@servername
는 -X
전혀 표시 이름없이 $의 DISPLAY 환경 변수 오류의 제거 얻을 것이다
🙂