Я поддерживаю модный пакет для построения графиков, реализующий функцию plot_foobar()
. Он возвращает фигуру с графиком, чтобы пользователь мог что-то с ней сделать, например. сохранить в файл (savefig()
) или показать. К сожалению, show()
ничего не делает.
MWE:
def plot_foobar():
# fancy plotting routing in a package
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot([1, 2], [3, 4])
return fig
# the user invokes the plotting function and gets back the figure object
fig = plot_foobar()
# saving the file works
# fig.savefig("out.png")
# :(
fig.show()
# works, but is clumsy:
# import matplotlib.pyplot as plt
# plt.show()
Это предназначено?
Если да, я мог бы, конечно, попросить пользователя импортировать matplotlib и позвонить plt.show()
самой - это работает. Я бы предпочел не раскрывать эту информацию и не заставлять пользователя импортировать что-то только для показа рисунка. Есть ли какой-то другой объект, который я мог бы вернуть, на котором работает show()
, savefig()
и т. д.?
Pyplot — это место, где запускается графический интерфейс, который может отображать что угодно, поэтому невозможно «показать», если у вас не запущен графический интерфейс. Matplotlib понимает, что это глупо, и работает над небольшой перестройкой этой архитектуры, но это займет некоторое время.
Спасибо Джоди за ответ. Я не совсем понял, где запускается графический интерфейс. В
import matplotlib.pyplot
? И есть ли отчет об ошибке / проблема, за которой я могу следить в отношении перезаписи?Я думаю github.com/matplotlib/matplotlib/pull/18852
Более свежий отчет об ошибке: github.com/matplotlib/matplotlib/issues/19956