Я пытаюсь создать цифру на удаленном компьютере с командой pylab.savefig
.
Но я получил такую ошибку:
Unable to access the X Display, is $DISPLAY set properly?
Как правильно сохранить фигуру?
Я пытаюсь создать цифру на удаленном компьютере с командой pylab.savefig
.
Но я получил такую ошибку:
Unable to access the X Display, is $DISPLAY set properly?
Как правильно сохранить фигуру?
По умолчанию, matplotlib будет использовать что-то вроде бэкэнда TkAgg
. Для этого требуется запуск X-сервера.
Пока вы можете просто использовать X-переадресацию, будет заметный лаг, поскольку matplotlib пытается подключиться к удаленному X-серверу. Если вам не нужно взаимодействовать с сюжетом, часто бывает лучше ускорить процесс, полностью избегая X-соединения.
Если вы хотите сделать сюжет без необходимости X-сервера вообще, используйте Agg
backend.
например. сделайте что-нибудь вроде этого:
import matplotlib
matplotlib.use('Agg') # Must be before importing matplotlib.pyplot or pylab!
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot(range(10))
fig.savefig('temp.png')
Если вы хотите, чтобы это было поведением по умолчанию, вы можете изменить свой файл matplotlibrc для использования бэкэнд Agg
по умолчанию.
Подробнее см. в этой статье.
Попробуйте установить для переменной DISPLAY подходящее значение.
Графика по сети с использованием X11 работает на клиентском (удаленном) компьютере, имеющем переменную окружения DISPLAY, которая указывает, где рисовать графику. Как правило, это будет что-то вроде mydesktop.example.com:0.0 - тогда, когда программа X11 пытается что-то нарисовать, она просвистывает по сети на mydesktop.example.com, который является машиной, перед которой вы сидите (X сервер), и это всплывает.
Теперь, если перед вами машина Windows, вам понадобится X-сервер откуда-нибудь - Cygwin/X11 или коммерческий eXceed подойдут.
Вам также необходимо убедиться, что с безопасностью обращаются - нельзя, чтобы кто-то писал на ваш экран по сети.
Как вы подключаетесь к удаленной машине? Потому что, если вы переходите с Linux-бокса на другой Linux-блок с помощью ssh, то, вероятно, простое решение - это использовать "ssh -X foo.example.com" для подключения - это соединение X11 через локальный сокет.
Итак, если ssh -X не является ответом, можем ли мы получить дополнительную информацию об операционных системах, пожалуйста?