У меня есть фрагмент кода, который я получил от коллеги по работе. Этот фрагмент кода создает график, подобный показанному ниже. пример изображения участка
Он делает это, ссылаясь на другую функцию в другом фрагменте кода; который я не хочу ни в коем случае переделывать.
Что я хотел бы сделать, так это написать фрагмент кода, который сохраняет этот график в виде файла png, т. е. я ищу функцию, которую я могу поместить в другую функцию как переменную, которая сохранит ее как файл png/jpeg.
Код:
Вот код:
for file in files:
import matplotlib.pyplot as plt
connection = sqlite3.connect( file )
animalPool = AnimalPool( )
animalPool.loadAnimals( connection )
# show the mask of animals at frame 300
animalPool.showMask( 701 )
Он вызывает следующую функцию:
def showMask(self, t ):
'''
show the mask of all animals in a figure
'''
fig, ax = plt.subplots()
ax.set_xlim(90, 420)
ax.set_ylim(-370, -40)
for animal in self.getAnimalList():
mask = animal.getBinaryDetectionMask( t )
mask.showMask( ax=ax )
plt.show()
Я уже пробовал функцию "savefig" matplotlib, но это просто сохраняет пустое изображение.
Я очень новичок в кодировании и пытаюсь учиться на лету, поэтому, если этот вопрос плохо сформулирован или объяснен, пожалуйста, дайте мне знать, что сбивает с толку, потому что я также учусь задавать вопросы о такого рода вещах.
Вы пробовали savefig
и это не сработало? Возможно, если вы опубликуете минимальный воспроизводимый пример для этого кода, кто-то сможет предложить, как заставить его работать.
если он сохраняет пустое изображение, поместите функцию «ближе» к тому месту, где создается фигура, она должна быть после любого кода, который создает фигуру, но перед тем, что начинает создавать новую фигуру.
Поскольку вы, кажется, новичок в Stack Overflow, вам следует прочитать Как создать минимальный, полный и проверяемый пример
Обновлен вопрос, чтобы включить код.
Код, который вы разместили, не включает вашу попытку savefig
, хотя это важная часть вопроса.
После вызова plt.show()
создается новая фигура. Вот почему вы получаете пустое изображение, когда вызываете plt.savefig()
после plt.show()
. Я знаю, что вы не хотите вносить какие-либо изменения в функцию. Однако добавление plt.savefig("plot.png", format="png")
в строке перед plt.show()
было бы самым простым решением.
Функции, которые создают графики matplotlib, должны принимать фигуру или оси в качестве входных данных и создавать их только при необходимости. Они должны вернуть созданные объекты для дальнейшего использования. Наконец, они не должны звонить plt.show()
или, если должны, предоставлять возможность отказа.
Например, для функции построения графика по одной оси это может выглядеть так:
def plottingfunction(*arguments, ax=None, show=True):
if ax is None:
fig, ax = plt.subplots()
else:
fig = ax.figure
# do something with fig and ax here, e.g.
line, = ax.plot(*arguments)
if show:
plt.show()
return fig, ax, line
Если вы придерживаетесь такой структуры, легко сделать все, что вам нужно, после вызова функции
fig, _, _ = plottingfunction([1,2,3], [3,2,4], show=False)
fig.savefig("myplot.png")
plt.show()
Можете ли вы показать свой код?