Сохраните график в файл изображения вместо отображения его с помощью Matplotlib - PullRequest
958 голосов
/ 08 марта 2012

Я пишу быстрый и грязный скрипт для генерации графиков на лету.Я использую приведенный ниже код (из документации Matplotlib ) в качестве отправной точки:

from pylab import figure, axes, pie, title, show

# Make a square figure and axes
figure(1, figsize=(6, 6))
ax = axes([0.1, 0.1, 0.8, 0.8])

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]

explode = (0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5})

show()  # Actually, don't show, just save to foo.png

Я не хочу отображать график в графическом интерфейсе, вместо этого я хочу сохранитьучасток к файлу (скажем, foo.png), так что, например, его можно использовать в пакетных сценариях.Как мне это сделать?

Ответы [ 18 ]

11 голосов
/ 27 марта 2016

Решение:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
plt.figure()
ts.plot()
plt.savefig("foo.png", bbox_inches='tight')

Если вы хотите отобразить изображение и сохранить его, используйте:

%matplotlib inline

после import matplotlib

11 голосов
/ 29 августа 2015

Если, как и я, вы используете Spyder IDE, вам необходимо отключить интерактивный режим с помощью:

plt.ioff()

(эта команда автоматически запускается при научном запуске)

Если вы хотите включить его снова, используйте:

plt.ion()

6 голосов
/ 20 июля 2018

В соответствии с вопросом Matplotlib (pyplot) savefig выводит пустое изображение .

Следует отметить одну вещь: если вы используете plt.show и оно должно быть после plt.savefig, или вы дадитепустое изображение.

Подробный пример:

import numpy as np
import matplotlib.pyplot as plt


def draw_result(lst_iter, lst_loss, lst_acc, title):
    plt.plot(lst_iter, lst_loss, '-b', label='loss')
    plt.plot(lst_iter, lst_acc, '-r', label='accuracy')

    plt.xlabel("n iteration")
    plt.legend(loc='upper left')
    plt.title(title)
    plt.savefig(title+".png")  # should before plt.show method

    plt.show()


def test_draw():
    lst_iter = range(100)
    lst_loss = [0.01 * i + 0.01 * i ** 2 for i in xrange(100)]
    # lst_loss = np.random.randn(1, 100).reshape((100, ))
    lst_acc = [0.01 * i - 0.01 * i ** 2 for i in xrange(100)]
    # lst_acc = np.random.randn(1, 100).reshape((100, ))
    draw_result(lst_iter, lst_loss, lst_acc, "sgd_method")


if __name__ == '__main__':
    test_draw()

enter image description here

5 голосов
/ 17 ноября 2018
import matplotlib.pyplot as plt
plt.savefig("image.png")

В Jupyter Notebook вы должны удалить plt.show() и добавить plt.savefig() вместе с оставшимся plt-кодом в одной ячейке.Изображение все равно будет отображаться в вашей записной книжке.

5 голосов
/ 19 апреля 2018
#write the code for the plot     
plt.savefig("filename.png")

Файл будет сохранен в том же каталоге, что и файл python / Jupyter, работающий

3 голосов
/ 14 декабря 2018

Учитывая, что сегодня (не было доступно, когда был задан этот вопрос) многие люди используют Jupyter Notebook в качестве консоли Python, существует чрезвычайно простой способ сохранить графики как .png, просто вызовите matplotlib 's pylab class из Jupyter Notebook, нарисуйте «встроенные» ячейки jupyter фигуры, а затем перетащите эту фигуру / изображение в локальный каталог. Не забывай %matplotlib inline в первой строке!

0 голосов
/ 12 июля 2019

В дополнение к вышеперечисленному, я добавил __file__ для имени, чтобы изображение и файл Python получили одинаковые имена.Я также добавил несколько аргументов, чтобы он выглядел лучше:

# Saves a PNG file of the current graph to the folder and updates it every time
# (nameOfimage, dpi=(sizeOfimage),Keeps_Labels_From_Disappearing)
plt.savefig(__file__+".png",dpi=(250), bbox_inches='tight')
# Hard coded name: './test.png'

Найден окончательный совет ЗДЕСЬ .

0 голосов
/ 25 июня 2019

Вы можете сохранить свое изображение с любым расширением (png, jpg и т. Д.) И с любым разрешением. Вот функция для сохранения вашей фигуры.

import os

def save_fig(fig_id, tight_layout=True, fig_extension="png", resolution=300):
    path = os.path.join(IMAGES_PATH, fig_id + "." + fig_extension)
    print("Saving figure", fig_id)
    if tight_layout:
        plt.tight_layout()
    plt.savefig(path, format=fig_extension, dpi=resolution)

'fig_id' - это имя, под которым вы хотите сохранить свою фигуру. Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...