Well, the methodology is sufficient and efficient, I'm OK with that :)

Thanks for these additional information.

Regards,
Le 2 nov. 2014 09:34, "Scott Lasley" <slas...@space.umd.edu> a écrit :

> I wish I could say that it was because of a deep understanding of the
> inner workings of matplotlib or a rock solid grasp of python 3's bytes vs
> strings, but it wasn't.   fig.savefig threw the "TypeError: string argument
> expected, got 'bytes'" exception, so I figured BytesIO might work better
> with the binary png data than StringIO, and it did.  Your image URI
> included base64 encoding I added the base64 code and fiddled with decoding
> to get it to produce ASCII.  iPython is great for this sort of playing
> around with snippets of code.
>
> btw, if you are not aware of the pros and cons of using data uri's to
> embed images take a look at this Wikipedia page for some helpful information
> http://en.wikipedia.org/wiki/Data_URI_scheme
>
> Apologies if you were expecting a more detailed answer,
> Scott
>
>
> On Nov 1, 2014, at 4:37 PM, Julien Hillairet <julien.hillai...@gmail.com>
> wrote:
>
> > Indeed, it works also for me with Python 3.3.5.
> >
> > Could you explain the changes you made and the reasons behind the
> byte/string encoding ?
> >
> > Best regards,
> >
> > 2014-11-01 17:21 GMT+01:00 Scott Lasley <slas...@space.umd.edu>:
> > 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

Reply via email to