2011-01-16 2 views
54

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

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

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

+1

http://www.stackoverflow.com/questions/2801882/generating-a-png-with-matplotlib-when-display-is-undefined?lq=1 –

ответ

113

По умолчанию matplotlib будет использовать что-то вроде фона TkAgg. Для этого требуется запуск X-сервера.

Хотя вы можете просто использовать X-пересылку, будет заметный лаг, поскольку matplotlib пытается подключиться к удаленному X-серверу. Если вам не нужно взаимодействовать с сюжетом, часто бывает лучше ускорить процесс, полностью избегая X-соединения.

Если вы хотите сделать участок без X-сервера вообще, используйте вместо этого Aggbackend.

E.g. сделать что-то вроде этого:

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 file использовать Agg бэкенд по умолчанию.

См. this article for more information.

+1

У меня была такая же проблема с gerry. Для меня одного трюка Джо недостаточно, мне также нужно было сделать ssh -X nos @ server.com, а не просто ssh – nos

+0

Большое спасибо. Это решение более понятно, чем любое другое решение .... – upendra

+0

Здравствуйте, Джо, у меня возникли вопросы, которые я задал. Мне нужна экспертная консультация, как вы, пожалуйста, посмотрите http://stackoverflow.com/questions/36248016/how-to-get-more-information-in-2nd-plot-by-clicking-1st-plot-using-python -clicki –

1

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

+0

Спасибо за ваше объяснение. Я ssh Linux-машина под окнами. Можно ли сделать фигуру без X11? – gerry

+0

Не так, чтобы он отображался на экране - вам нужно было бы написать pylab в файл, а затем скопировать этот файл в окно Windows. Может быть, дайте http://winswitch.org/ a go - это простой интерфейс для фантазии кросс-платформенной графики. – Spacedman

+0

Я сделал «ssh -X имя_пользователя @ servername» из моего linux box в другой linux box, и он сработал –

Смежные вопросы