Я генерирую фигуры matplotlib в сценарии, который я запускаю поочередно с графическим дисплеем или без него.Мне бы хотелось, чтобы скрипт настраивался автоматически: при отображении он должен отображать цифры в интерактивном режиме, а без отображения - просто сохранять их в файл.
Из ответа на вопрос Создание графиков matplotlib без запущенного X-сервера , я узнал, что можно использовать бэкэнд Agg для неинтерактивного черчения.
я пытаюсь с этим кодом:
import matplotlib
try:
import matplotlib.pyplot as plt
fig = plt.figure()
havedisplay = True
except:
matplotlib.use("Agg")
import matplotlib.pyplot as plt
fig = plt.figure()
havedisplay = False
# do the plotting
if havedisplay:
plt.show()
else:
fig.savefig("myfig.png")
Это работает как исключение в случае с дисплеем.Однако без дисплея вызов matplotlib.use
не эффективен, поскольку дисплей уже выбран.Ясно, что я должен вызвать matplotlib.use
до import matplotlib.pyplot
, но тогда я не знаю, как проверить, доступен ли дисплей.
Я также попробовал с экспериментальной функцией matplotlib.switch_backend
вместоиз matplotlib.use
, но при этом возникает RuntimeError.
Есть ли у кого-нибудь идеи, как заставить вышеуказанный код работать как задумано, или может предложить альтернативный способ определения, доступен ли дисплей для matplotlib или нет?