Как сохранить фигуру удаленно с pylab?

Я пытаюсь создать цифру на удаленном компьютере с командой pylab.savefig. Но я получил такую ​​ошибку:

Unable to access the X Display, is $DISPLAY set properly?

Как правильно сохранить фигуру?

Ответ 1

По умолчанию, 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 по умолчанию.

Подробнее см. в этой статье.

Ответ 2

Попробуйте установить для переменной 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 не является ответом, можем ли мы получить дополнительную информацию об операционных системах, пожалуйста?