matplotlib - 将图像存储在变量中

Ram*_*mya 16 html python image matplotlib

我想将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')
Run Code Online (Sandbox Code Playgroud)

这些功能都不适合我的用例:

  • plt.savefig(sys.stdout,format ='png') - 将其写入stdout.这确实有帮助..因为我必须将图像嵌入到html文件中.
  • 从命令行执行时,plt.show()/ plt.draw()不执行任何操作

Pau*_*aul 29

你试过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
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,在Python 3中你需要使用io.BytesIO,例如:`buf = io.BytesIO(); plt.gcf().savefig(buf,format ='png'); buf.seek(0); return base64.b64encode(buf.read())` (12认同)

dgm*_*p88 15

完整的python 3版本,汇总了Paul的答案metaperture的评论.

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
Run Code Online (Sandbox Code Playgroud)