Пересылка Python 2.7.12 Matplotlib x11 не показывает или выдает несколько ошибок

Я вхожу в систему на удаленной Linux-машине из Windows 7 через шпатлевку. В настройках я включил опцию переадресации X11 и добавил флаг -X при входе на сервер ssh. На этом сервере я запускаю следующий код Python:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import pyfits
a = raw_input("path: ") #filepath on the server, conected with filename
file = pyfits.open (a +'/file.fits', memap = 'True')
data = file[0].data
print data.shape #shape gets printed correctly

plt.figure(1)
plt.imshow(data[0,:,:], cmap = 'gray')
print 3
plt.show()
print 4

Я получаю все значения печати, и вывод выглядит следующим образом:

(300, 512, 512)
3
4

нет ни ошибки, ни открытого окна x11. Comadoline возвращается, как если бы программа была в конце. Есть ли возможность заставить команду plt.show() действительно отображаться на машине с удаленным управлением Windows?


person HenrikWolf    schedule 27.07.2016    source источник
comment
Чтобы проверить, действительно ли работает ваша пересылка x11, вы можете сохранить свою фигуру с помощью plt.savefig("out.png"), а затем открыть ее для просмотра с помощью eog out.png, если у вас есть глаз гнома на удаленной машине.   -  person mitoRibo    schedule 28.07.2016
comment
Вы попросили mpl использовать серверную часть 'Agg', которая не включает графический интерфейс. Если вы хотите использовать интерактивные окна, вам нужно будет использовать один из бэкэндов, подключенных к графическому интерфейсу (например, 'Qt4Agg' или 'tkagg').   -  person tacaswell    schedule 28.07.2016


Ответы (1)


Я понял:

сначала, как сказал "tcaswell", вы не можете использовать бэкенд 'Agg' с интерактивными окнами. Эта ошибка исправляется простым удалением первых двух строк кода. Вторая проблема заключается в том, что с помощью команды plt.figure(1) создается новая цифра 1, но в команде plt.show() не указана цифра, которая должна отображаться. Таким образом, эту ошибку можно решить, либо удалив строку с надписью plt.figure(1), либо поместив номер фигуры для построения в скобки после команды plt.show(): plt.show(1). Таким образом, можно создать несколько фигур в одном файле и переключаться между ними.

person HenrikWolf    schedule 28.07.2016