This works for me with python 3.4.2 import matplotlib.pyplot as plt from io import BytesIO import base64
fig = plt.figure() ax = fig.add_subplot(111) ax.plot([1,2,3]) sio = BytesIO() fig.savefig(sio, format="png") html = """<html><body> <img src="data:image/png;base64,{}"/> </body></html>""".format(base64.encodebytes(sio.getvalue()).decode()) For python 2.7.8 change html =""" to html = """<html><body> <img src="data:image/png;base64,%s"/> </body></html>""" % base64.encodestring(sio.getvalue()) Best regards, Scott On Nov 1, 2014, at 7:37 AM, Julien Hillairet <julien.hillai...@gmail.com> wrote: > Dear all, > I'm trying to write a html page content in which a png figure is generated by > matplotlib, with Python3. > However, the following piece of code does not work with matplotlib/Python3 > (while it should work with Python2). The error is the following on > TypeError: string argument expected, got 'bytes' > when on fig.savefig(sio, format="png") > Could someone explain me how to do it ? > Best regards, > Julien > > -------------------------------------------- > > import matplotlib.pyplot as plt > > from io import StringIO > fig = plt.figure() > ax = fig.add_subplot(111) > ax.plot([1,2,3]) > > sio = StringIO() > > fig.savefig(sio, format="png") > > html = """<html><body> > ...a bunch of text and html here... > <img src="data:image/png;base64,%s"/> > ...more text and html... > </body></html>""" % sio.getvalue().strip() > > ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users