Я пытаюсь использовать networkx с Python. Когда я запускаю эту программу, она получает эту ошибку. Чего-то не хватает?
#!/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
python
matplotlib
graph
krisdigitx
источник
источник
Ответы:
Основная проблема заключается в том, что (в вашей системе) matplotlib выбирает бэкэнд с использованием x по умолчанию. У меня была такая же проблема на одном из моих серверов. Решением для меня было добавить следующий код в место, которое читается перед любым другим импортом pylab / matplotlib / pyplot :
Альтернатива - установить его в вашем .matplotlibrc.
источник
backend: agg
в~/.config/matplotlib'/matplotlibrc
(например, см. http://matplotlib.org/faq/troublesho__faq.html#locating-matplotlib-config-dir). См. Также matplotlib.org/users/customizing.html , в котором пример файла конфигурации находится внизу страницы. Найдите «agg» на этой странице, и вы увидите нужный вам параметр конфигурации.Так же, как дополнение к ответу Рейно.
Постоянный способ решить эту проблему - отредактировать файл .matplotlibrc. Найти через
Затем измените бэкэнд в этом файле на
backend : Agg
. Вот и все.источник
$MATPLOTLIBRC
в каталог , где вы хотите , чтобы бросить свой собственный matplotlibrc в.Чистый ответ - потратить немного времени на правильную подготовку среды выполнения.
Первый метод , вы должны подготовить среду выполнения, чтобы использовать
matplotlibrc
файл, так мудро , рекомендованный Chris Q. , установкав этом файле. Вы даже можете контролировать - без изменений кода - как и где matplotlib ищет и находит
matplotlibrc
файл .Второй метод, которым вы должны подготовить свою среду исполнения, - это использовать
MPLBACKEND
переменную среды (и сообщить своим пользователям, чтобы она использовалась):Это удобно, потому что вам даже не нужно предоставлять другой файл на диске, чтобы это работало. Я использовал этот подход, например, для тестирования в условиях непрерывной интеграции и запуска на удаленных машинах, которые не имеют дисплеев.
Жесткое программирование вашего бэкэнда matplotlib в «Agg» в вашем коде Python похоже на врезание квадратного колышка в круглое отверстие большим молотком, когда вместо этого вы могли просто сказать matplotlib, что это должно быть квадратное отверстие.
источник
Я получил ошибку при использовании matplotlib через Spark.
matplotlib.use('Agg')
не работает для меня В конце концов, следующий код работает для меня. Больше здесьисточник
Я просто повторю то, что сказал @Ivo Bosticky, что можно пропустить. Поместите эти строки в ОЧЕНЬ начало файла py.
Или можно получить ошибку
Это решит все проблемы с отображением
источник
Я обнаружил, что этот фрагмент хорошо работает при переключении между средами X и no-X.
источник
При входе на сервер для выполнения кода используйте вместо этого:
-X
избавится от без имени дисплея и без ошибок переменной окружения $ DISPLAY:)
источник
-o ServerAliveCountMax=120 -o ServerAliveInterval=30
что клиент ssh будет отправлять пустой пакет каждые 30 секунд в течение максимум 1 часа.На какой ты системе? Похоже, у вас есть система с X11, но переменная окружения DISPLAY не была правильно установлена. Попробуйте выполнить следующую команду и перезапустить программу:
источник
Меня устраивает.
источник
Еще одна вещь, которую нужно проверить, - авторизован ли ваш текущий пользователь для подключения к дисплею X. В моем случае root не мог этого сделать, и matplotlib жаловался с той же ошибкой.
источник:
http://www.debian-administration.org/articles/494https://debian-administration.org/article/494/Getting_X11_forwarding_through_ssh_working_after_running_suисточник
Чтобы ваш код переносился на Windows, Linux и OSX, а также на системы с дисплеями и без них, я бы предложил следующий фрагмент:
Кредит: https://stackoverflow.com/a/45756291/207661
источник
Для Google Cloud Machine Learning Engine:
А затем распечатать в файл:
и создать PDF:
источник