Как сохранить результат функции в виде файла .png - PullRequest
0 голосов
/ 22 мая 2019

У меня есть кусок кода, который я получил от сотрудника в работе. Этот фрагмент кода создает сюжет, подобный показанному ниже. пример изображения сюжета

Это делается путем ссылки на другую функцию в другом фрагменте кода; который я не хочу никоим образом изменять.

То, что я хотел бы сделать, это написать фрагмент кода, который сохраняет этот график в виде файла 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, но она просто сохраняет чистое изображение.

Я очень новичок в кодировании и пытаюсь учиться на лету, поэтому, если этот вопрос не сформулирован или не объяснен, пожалуйста, дайте мне знать, что сбивает с толку, потому что я также учусь задавать вопросы такого рода вещи.

1 Ответ

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

Функции, которые создают графики 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...