Как сохранить график matplotlib в виде файла .png

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

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

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

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

Можете ли вы показать свой код?

Joe 22.05.2019 11:16

Вы пробовали savefig и это не сработало? Возможно, если вы опубликуете минимальный воспроизводимый пример для этого кода, кто-то сможет предложить, как заставить его работать.

khelwood 22.05.2019 11:16

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

Sam Mason 22.05.2019 11:20

Поскольку вы, кажется, новичок в Stack Overflow, вам следует прочитать Как создать минимальный, полный и проверяемый пример

Sheldore 22.05.2019 11:49

Обновлен вопрос, чтобы включить код.

ABadLab 22.05.2019 11:53

Код, который вы разместили, не включает вашу попытку savefig, хотя это важная часть вопроса.

Leporello 22.05.2019 12:02

После вызова plt.show() создается новая фигура. Вот почему вы получаете пустое изображение, когда вызываете plt.savefig() после plt.show(). Я знаю, что вы не хотите вносить какие-либо изменения в функцию. Однако добавление plt.savefig("plot.png", format="png") в строке перед plt.show() было бы самым простым решением.

hchagani 22.05.2019 12:17
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
4
7
11 366
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функции, которые создают графики 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()

Другие вопросы по теме