Подтвердить что ты не робот

Matplotlib: отображение графика на удаленной машине

У меня есть код python, выполняющий некоторые вычисления на удаленной машине, с именем A. Я подключаюсь через A через ssh к машине с именем B. Есть ли способ отобразить фигуру на машине B?

4b9b3361

Ответ 1

Если вы используете matplotlib в Mac OS X на удаленном компьютере (B), вы должны сначала убедиться, что вы используете один из оконных дисплеев на основе X11, так как родной Mac OS X не может экспортировать свои графики в другой дисплей. Выбор серверной части может быть достигнут с

import matplotlib
matplotlib.use('GTK')  # Or any other X11 back-end

Список поддерживаемых серверных частей можно получить, указав для use() неправильное имя серверной части: matplotlib затем напечатает сообщение об ошибке, в котором перечислены возможные серверные части.

Затем можно использовать пересылку ssh X11 для отображения графиков matplotlib.

Ответ 2

Конечно, вы можете включить пересылку X11. Обычно это делается путем передачи опции -X или -Y на ssh при подключении к удаленному компьютеру

ssh -X computerA

Обратите внимание, что демон SSH на компьютере A также должен быть настроен для включения пересылки X11. Это делается путем размещения

X11Forwarding yes

в файле конфигурации A sshd_config.

Если на компьютере. В SSH-демоне нет включенной переадресации X11, вы всегда можете написать Python результат вычисления в текстовый файл, загрузить его на компьютер B и локально использовать Matplotlib.

Ответ 3

Следующее работало для меня, используя Mac OS X на локальном компьютере (машина B) и ubuntu на удаленном компьютере (машина A).

Для этого вам понадобится сервер X11, установленный на вашей локальной машине.

Если вы используете последнюю версию Mac OSX (OS X Mountain Lion или новее), она не была бы установлена ​​с предустановленной X11 (см. http://support.apple.com/kb/ht5293). Проверьте, есть ли у вас X11, открыв терминал Mac и выполните команду xterm. Если откроется окно X11, вы все настроены. Если он говорит, что команда не найдена, перейдите в http://xquartz.macosforge.org/landing/ и установите сервер X11. Затем выйдите из системы и войдите в свой Mac.

После входа в систему попробуйте снова запустить команду xterm. Он должен открыть окно X11. В этот момент ваша переменная $DISPLAY также должна быть правильно установлена. Если он не установлен, убедитесь, что вы вошли в систему из-за установки X11 из XQuartz.

echo $DISPLAY
/tmp/launch-I9I3aI/org.macosforge.xquartz:0

Затем с вашей локальной машины используйте ssh -X для удаленного удалённого компьютера A:

ssh -X [email protected]

Затем на удаленном компьютере:

python
>>> import matplotlib
>>> matplotlib.use('GTKAgg')  #I had to use GTKAgg for this to work, GTK threw errors
>>> import matplotlib.pyplot as plt  #...  and now do whatever you need...

Убедитесь, что вы вызываете matplotlib.use ПЕРЕД тем, как импортировать что-либо еще из matplotlib (например, matplotlib.pyplot)

Другие полезные советы по устранению неполадок при использовании ssh -X: http://oroborosx.sourceforge.net/remotex.html#usessh

Ответ 4

GTK кажется невозможным для работы над Ubuntu с Python3. Вместо этого я использовал tkagg (из этого ответа):

import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt

проверить с этим:

import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
plt.show()

Ответ 5

если это не сработает, вы также можете попробовать:

import matplotlib.pyplot as plt
plt.switch_backend('agg')

или же

import matplotlib.pyplot as plt
plt.switch_backend('TkAgg')

мне показалось, что это работает

Тем не менее, если вы пытаетесь заставить работать графический интерфейс, я предлагаю вам взглянуть на эту ссылку: http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/

Ответ 6

Я использовал IPython для решения связанной проблемы. Шаги следующие:

Шаг 1: Установите IPython и Jupyter на удаленной машине (A) локально (без привилегий root) с помощью следующих команд:

pip install --user ipython
pip install --user jupyter 

Обновление matplotlib:

pip install --user -U matplotlib

Шаг 2:

Запустите Jupyter без браузера из каталога кодов на удаленном компьютере (A):

cd PATH/TO/THE/CODE
jupyter notebook --no-browser --port=8080

После этой команды URL получит нечто похожее на приведенное ниже:

HTTP://локальный: 8080/маркер = 5528ab1eeb3f621b90b63420f8bbfc510edf71f21437c4e2

Шаг 3:

Теперь откройте другой терминал на локальной машине (B) и подключитесь к удаленной машине (A), используя ssh:

ssh -N -L 8080:localhost:8080 [email protected]

Номер порта должен быть одинаковым на шаге 2 и шаге 3. В этом примере номер порта - 8080.

Шаг 4:

Скопируйте и вставьте URL-адрес на шаге 3 в браузер на локальном компьютере (B).

Теперь записная книжка на удаленной машине может использоваться через браузер, а график может быть создан с использованием данных на удаленной машине.

Ответ 7

export MPLBACKEND="agg" это сработало для меня. очевидно, вы также можете установить его с помощью кода.