matplotlib - сохранить изображение в переменной - PullRequest
16 голосов
/ 15 марта 2011

Я хотел бы сохранить изображение, сгенерированное matplotlib, в переменной raw_data, чтобы использовать его в качестве встроенного изображения.

import os
import sys
os.environ['MPLCONFIGDIR'] = '/tmp/'
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt

print "Content-type: image/png\n"
plt.plot(range(10, 20))

raw_data = plt.show()

if raw_data:
    uri = 'data:image/png;base64,' + urllib.quote(base64.b64encode(raw_data))
    print '<img src = "%s"/>' % uri
else:
    print "No data"

#plt.savefig(sys.stdout, format='png')

Ни одна из функций не подходит для моего варианта использования:

  • plt.savefig (sys.stdout, format = 'png') - записывает его в стандартный вывод.Это помогает ... так как мне нужно встроить изображение в HTML-файл.
  • plt.show () / plt.draw () ничего не делает при выполнении из командной строки

Ответы [ 2 ]

29 голосов
/ 15 марта 2011

Вы пробовали cStringIO или эквивалент?

import os
import sys
import matplotlib
import matplotlib.pyplot as plt
import StringIO
import urllib, base64

plt.plot(range(10, 20))
fig = plt.gcf()

imgdata = StringIO.StringIO()
fig.savefig(imgdata, format='png')
imgdata.seek(0)  # rewind the data

print "Content-type: image/png\n"
uri = 'data:image/png;base64,' + urllib.quote(base64.b64encode(imgdata.buf))
print '<img src = "%s"/>' % uri
13 голосов
/ 14 июля 2017

Завершите версию Python 3, составив Ответ Павла и комментарий метапертуры .

import matplotlib.pyplot as plt
import io
import urllib, base64

plt.plot(range(10))
fig = plt.gcf()

buf = io.BytesIO()
fig.savefig(buf, format='png')
buf.seek(0)
string = base64.b64encode(buf.read())

uri = 'data:image/png;base64,' + urllib.parse.quote(string)
html = '<img src = "%s"/>' % uri
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...