Отключить отображение с помощью corner.py на удаленном компьютере с помощью ssh - PullRequest
1 голос
/ 08 мая 2019

Я создавал графики на удаленной машине, используя ssh. Когда я использую matplotlib, я могу сохранить рисунки и избежать их отображения, используя matplotlib.use("PDF"). Сейчас я создаю график, используя corner.py API , но я не могу найти аналогичный способ, чтобы избежать отображения рисунка. (Я явно не прошу показывать рисунок где-либо.)

Ошибка может быть воссоздана:

import corner
import numpy as np

# Random data
ndim, nsamples = 3, 1000
np.random.seed(42)
samples = np.random.randn(ndim * nsamples).reshape([nsamples, ndim])

# Make figure
figure = corner.corner(samples)
figure.savefig('test.pdf')

Моя первая ошибка была

_tkinter.TclError: нет отображаемого имени и нет переменной окружения $ DISPLAY.

Я попытался добавить export DISPLAY=localhost:0.0 в мой файл .bashrc, но затем получил

_tkinter.TclError: не удалось подключиться к отображению «localhost: 0.0».

Я пробовал figure.ioff(), plt.close(figure) и использую ssh -X remoteMachine, но продолжаю получать подобные ошибки.

Мне не нужно или не нужно отображать фигуру, я просто хочу сохранить ее.

Я тоже не думаю Вызов pylab.savefig без отображения в ipython мне здесь помогает, потому что у меня нет этой проблемы с matplotlib, только с углом.

1 Ответ

0 голосов
/ 08 мая 2019

corner использует matplotlib в качестве бэкэнда , поэтому ответ от Здесь вызывается pylab.savefig без отображения в ipython - выберите matplotlib бэкэнд, который отображается в память:

import matplotlib
matplotlib.use('Agg')

import corner
<etc>

Обратите внимание на порядок: matplotlib требует, чтобы .use() был вызван до того, как matplotlib.pyplot или другие модули, связанные с построением, будут импортированы впервые; в противном случае это не имеет никакого эффекта, и печатается UserWarning, объясняющий это. corner.corner модуль импортирует pyplot сразу после его импорта.

...