[Matplotlib-users] savefig and StringIO error on Python3

2014-11-01 Thread Julien Hillairet
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 = """

...a bunch of text and html here...



...more text and html...

""" % sio.getvalue().strip()
--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] savefig and StringIO error on Python3

2014-11-01 Thread Benjamin Root
Please post the entire traceback so that we can know the context of the
error message. Also, exactly which versions of matplotlib and python are
you using?

Ben Root

On Sat, Nov 1, 2014 at 7:37 AM, Julien Hillairet  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 = """
>
> ...a bunch of text and html here...
>
> 
>
> ...more text and html...
>
> """ % sio.getvalue().strip()
>
>
>
> --
>
> ___
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>
--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] savefig and StringIO error on Python3

2014-11-01 Thread Scott Lasley
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 = """

""".format(base64.encodebytes(sio.getvalue()).decode())


For python 2.7.8 change html =""" to

html = """

""" % base64.encodestring(sio.getvalue())

Best regards,
Scott


On Nov 1, 2014, at 7:37 AM, Julien Hillairet  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 = """
> ...a bunch of text and html here...
> 
> ...more text and html...
> """ % sio.getvalue().strip()
> 
> --


--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] plot arbitrary 3D surface

2014-11-01 Thread Peter Kerpedjiev
Hi,

I'm trying to plot an outline of an arbitrary 3D shape using 
matplotlib's plot_surface, and I wanted to ask if any one has any ideas 
as to how to do it. Here's the beginnings of a simple example:

# create a grid
resolution = 10

xs = np.linspace(-1,1,resolution)
ys = np.linspace(-1,1,resolution)
zs = np.linspace(-1,1,resolution)

X,Y,Z = np.meshgrid(xs, ys, zs)

#Then we can calculate the square of the distance of each point to the 
center:
W = X**2 + Y**2 + Z**2

# Let's see which points are within a certain radius:
C = W < 1.

# this can be used to create a point-cloud
x = X[C]
y = Y[C]
z = Z[C]

 From this I tried a lot options, the best being to do some XOR 
operations on the array C to get a list of points which are on the 
surface of the sphere. My question is, can anybody see a reasonable way 
to plot this surface using mplot3D?

Of course plotting a sphere can be done using spherical coordinates, but 
that defeats the purpose of this example :) This is just a 
simplification as the application is actually to draw 3D contours (i.e. 
shapes, rather than iso-lines) of a three-parameter probability 
distribution.

Thanks in advance,

-Peter










--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Structure of contour object returned from tricontourf

2014-11-01 Thread Hartmut Kaiser
> On 26 October 2014 00:18, Hartmut Kaiser  wrote:
> At this point we assume, that polys[0] is a linear ring to be interpreted
> as
> a polygon exterior and polys[1:] are the corresponding interiors for
> polys[0].
> 
> Here are our questions:
> 
> Is this assumption correct?
> Is there any detailed documentation describing the structure of the
> returned
> geometries?
> Are the linear rings supposed to be correctly oriented (area > 0 for
> exteriors and area < 0 for the interiors)?
> 
> Hello Hartmut,
> In brief, the answers are no, no and yes.
> In more detail, assuming polys is not empty then it will contain one or
> more polygon exteriors and zero or more interiors, and they can be in any
> order.  Here is a simple example where polys[0] is an interior and
> polys[1] an exterior:
> 
> x = [0, 0, 1, 1, 0.5]
> y = [0, 1, 0, 1, 0.5]
> z = [0.5, 0.5, 0.5, 0.5, 0]
> triang = tri.Triangulation(x, y)
> contour = plt.tricontourf(triang, z, levels=[0.2, 0.4])
> The returned geometries are purposefully not documented.  They are an
> 'implementation detail' and not considered part of the public interface.
> and as such they could change at any time and hence should not be relied
> upon.  Of course you can choose to access them if you wish, as I do myself
> sometimes, but we make no promises about what the order of the polygons
> is, or that it won't change tomorrow.
> In reality the order of the polygons is chosen to be something that is
> easy for both the contour generation routines to create and for the
> various backends to render.  If you were to look at the output generated
> by contourf, you will see that it is organised differently from that
> produced by tricontourf and is more like you would like it to be, i.e. one
> or more groups of an exterior polygon followed by zero or more
> interiors.  This is historical as the contourf code dates from before all
> of the backends were able to render arbitrary groups of exterior and
> interior polygons, and so the contourf code has to calculate the order for
> the backends.  When the tricontourf code was written the backends were all
> able to calculate the exterior/interior containment themselves, so there
> was no need for tricontourf to do it as well.

Thanks Ian! Your detailed answer is much appreciated. 

As you might have already guessed, we have quite some problems creating clean 
geometries from the generated contour data. I have tried to put together one 
(reasonably) small test case illustrating at least one of our issues. I 
apologize for the lengthy code attached.

The two attached figures demonstrate what we see. Matplotlib.png (generated by 
the library) does not really look ok. Also, the attached shape.png shows that 
there are a lot of geometries generated which are self-intersecting 
(highlighted in dark blue), and we already skip polygons with less than 3 
points. BTW, there are many polygons stacked with the same geometries. 

Anything we can do about this? 

Thanks!
Regards Hartmut
---
http://boost-spirit.com
http://stellar.cct.lsu.edu



import sys
import matplotlib.pyplot as plt
import matplotlib.tri as tri
from matplotlib import path
from shapely.geometry import geo, Polygon, Point
import numpy

# create contours for test case
def create_test_contours():

  x = numpy.array( [-76.34244,-76.36786,-76.35223,-76.40118,-76.3905,
   -76.41039,-76.42416,-76.43492,-76.4437,-76.44031,
   -76.47977,-76.47267,-76.45914,-76.50938,-76.50371,
   -76.50534,-76.53763,-76.53808,-76.53674,-76.57217,
   -76.57292,-76.56992,-76.61163,-76.60898,-76.59344,
   -76.65379,-76.65218,-76.62014] )
  y = numpy.array( [37.00411,36.94697,36.91855,36.97744,36.89212,36.94417,
   36.9803,36.90823,36.95995,36.99866,36.9427,36.98559,
   37.02776,36.97269,37.01178,37.05462,36.99284,37.03721,
   37.08237,37.02015,37.06149,37.09983,37.04387,37.08551,
   37.1161,37.08103,37.11076,37.15342] )
  z = numpy.ma.masked_equal( 
[0.57833663768,0.59585130282,0.57725037291,0.61816105718,
   -9,0.62808432966,0.62889707758,0.63214800973,0.62361256066,
   0.63571681755,0.63464181838,0.63445566205,-9,0.63305024240,
   0.63890298185,-9,-9,0.0014958446745,-9,
   0.0035448925787,0.00056665199692,-9,0.0022350042433,0.0013006928908,
   -9,0.0035717841844,0.0036461797716,-9], -9 )

  ele = [(1,0,3),(2,1,4),(4,1,5),(5,1,3),(5,3,6),(7,4,5),(7,5,8),(8,5,6),
 
(6,9,8),(7,8,10),(10,8,11),(8,9,11),(9,12,11),(10,11,13),(13,11,14),(11,12,14),
 
(14,12,15),(13,14,16),(16,14,17),(14,15,17),(17,15,18),(16,17,19),(19,17,20),(17,18,20),
 
(20,18,21),(19,20,22),(22,20,23),(20,21,23),(23,21,24),(22,23,25),(25,23,26),(23,24,26),
 (24,27,26)]

  triang = tri.Triangulation(x, y, triangles=ele)
  levels = numpy.linspace(0, numpy.max(z), num=31)

  contours = plt.tricontourf(triang, z, levels=levels)
  plt.tricontour(triang, z, levels=levels)

  return contours

# c

Re: [Matplotlib-users] plot arbitrary 3D surface

2014-11-01 Thread Benjamin Root
Generally speaking, a plottable 3D surface can be represented
parametrically in 2D (hence why it is a surface). Your point cloud can not
be represented parametrically in 2 dimensions, hence why you are having
difficulty figuring out how to plot it as a surface. I used to have similar
problems with 3D plotting (both here and in Matlab) before I came to this
realization.

Your comment "of course, plotting a sphere can be done in spherical
coordinates" is actually the right thought process. Spherical coordinates
is how you parametrize your spherical surface. Pick a coordinate system
that is relevant to your problem at hand and use it.

I hope this helps!
Ben Root


On Sat, Nov 1, 2014 at 2:07 PM, Peter Kerpedjiev 
wrote:

> Hi,
>
> I'm trying to plot an outline of an arbitrary 3D shape using
> matplotlib's plot_surface, and I wanted to ask if any one has any ideas
> as to how to do it. Here's the beginnings of a simple example:
>
> # create a grid
> resolution = 10
>
> xs = np.linspace(-1,1,resolution)
> ys = np.linspace(-1,1,resolution)
> zs = np.linspace(-1,1,resolution)
>
> X,Y,Z = np.meshgrid(xs, ys, zs)
>
> #Then we can calculate the square of the distance of each point to the
> center:
> W = X**2 + Y**2 + Z**2
>
> # Let's see which points are within a certain radius:
> C = W < 1.
>
> # this can be used to create a point-cloud
> x = X[C]
> y = Y[C]
> z = Z[C]
>
>  From this I tried a lot options, the best being to do some XOR
> operations on the array C to get a list of points which are on the
> surface of the sphere. My question is, can anybody see a reasonable way
> to plot this surface using mplot3D?
>
> Of course plotting a sphere can be done using spherical coordinates, but
> that defeats the purpose of this example :) This is just a
> simplification as the application is actually to draw 3D contours (i.e.
> shapes, rather than iso-lines) of a three-parameter probability
> distribution.
>
> Thanks in advance,
>
> -Peter
>
>
>
>
>
>
>
>
>
>
>
> --
> ___
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] plot arbitrary 3D surface

2014-11-01 Thread Jerzy Karczmarczuk


Le 01/11/2014 19:21, Benjamin Root answers the query of Peter 
Kerpedjiev, who wants to plot (with Matplotlib) the surface of an 
implicit surface (at least it was his presented example).


Your comment "of course, plotting a sphere can be done in spherical 
coordinates" is actually the right thought process. Spherical 
coordinates is how you parametrize your spherical surface. Pick a 
coordinate system that is relevant to your problem at hand and use it.


Sorry Ben, but this is not an answer. P.K. clearly states that his case 
is more complicated, and no parametrization is likely. Anyway, the 
spherical exercise as it is presented uses the 3D constraint, it is not 
parametric.


The general solution is the *polygonization of the implicit surface*, 
which is a well established technology (although non-trivial). For 
example the /marching cubes / marching simplices/ algorithms and their 
variants.

These are techniques for the polygonization of a mesh.

If P.K. has an analytic formula for his distributions, and is able to 
compute gradients, etc., there are some more efficient techniques, but 
in general it is the case for solving the equation F(x,y,z)=0 for 
{x,y,z} ; here Matplotlib doesn't offer (yet) any tools if I am not 
mistaken.


Jerzy Karczmarczuk
Caen, France.


--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] plot arbitrary 3D surface

2014-11-01 Thread Benjamin Root
Jerzy,

Actually, my response is still completely valid. You can only plot surfaces
that can be represented parametrically in two dimensions. Find me a single
plotting library that can do differently without having to get to this
final step. For matplotlib, it is up to the user to get the data to that
point. As you stated, he is seeking polygonization of an *implicit*
surface. Matplotlib has no means of understanding this. And this is
unlikely to happen anytime soon given the inherent 2D limitations of
Matplotlib.

I am sorry if the answer is unsatisfactory to you, but it is the correct
one to give.

Ben Root


On Sat, Nov 1, 2014 at 2:49 PM, Jerzy Karczmarczuk <
jerzy.karczmarc...@unicaen.fr> wrote:

>
> Le 01/11/2014 19:21, Benjamin Root answers the query of Peter Kerpedjiev,
> who wants to plot (with Matplotlib) the surface of an implicit surface (at
> least it was his presented example).
>
>  Your comment "of course, plotting a sphere can be done in spherical
> coordinates" is actually the right thought process. Spherical coordinates
> is how you parametrize your spherical surface. Pick a coordinate system
> that is relevant to your problem at hand and use it.
>
>
> Sorry Ben, but this is not an answer. P.K. clearly states that his case is
> more complicated, and no parametrization is likely. Anyway, the spherical
> exercise as it is presented uses the 3D constraint, it is not parametric.
>
> The general solution is the *polygonization of the implicit surface*,
> which is a well established technology (although non-trivial). For example
> the *marching cubes / marching simplices* algorithms and their variants.
> These are techniques for the polygonization of a mesh.
>
> If P.K. has an analytic formula for his distributions, and is able to
> compute gradients, etc., there are some more efficient techniques, but in
> general it is the case for solving the equation F(x,y,z)=0 for {x,y,z} ;
> here Matplotlib doesn't offer (yet) any tools if I am not mistaken.
>
> Jerzy Karczmarczuk
> Caen, France.
>
>
>
>
> --
>
> ___
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>
--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] plot arbitrary 3D surface

2014-11-01 Thread Peter Kerpedjiev

Hi Jerzy and Ben,

Thanks for you answers!

I must say that although Ben is right in principle, Jerzy's answer is 
exactly what I was looking for. Even if matplotlib can't do it by 
itself, there appears to be other libraries that do the heavy lifting 
and return a set of triangles which can then be placed in a 
Polygon3DCollection and plotted.


It's always good to know what something is called. Searching for '3D 
contours' was leading nowhere, but plugging in '*polygonization of the 
implicit surface' *returned a multitude of descriptions of the problem 
and libraries. It turns out I had been trying to implement the marching 
cubes algorithm myself for the better part of the last week. Oops!


Thanks again to the both of you!!

-Peter


On 11/1/14, 8:34 PM, Benjamin Root wrote:

Jerzy,

Actually, my response is still completely valid. You can only plot 
surfaces that can be represented parametrically in two dimensions. 
Find me a single plotting library that can do differently without 
having to get to this final step. For matplotlib, it is up to the user 
to get the data to that point. As you stated, he is seeking 
polygonization of an *implicit* surface. Matplotlib has no means of 
understanding this. And this is unlikely to happen anytime soon given 
the inherent 2D limitations of Matplotlib.


I am sorry if the answer is unsatisfactory to you, but it is the 
correct one to give.


Ben Root


On Sat, Nov 1, 2014 at 2:49 PM, Jerzy Karczmarczuk 
mailto:jerzy.karczmarc...@unicaen.fr>> 
wrote:



Le 01/11/2014 19:21, Benjamin Root answers the query of Peter
Kerpedjiev, who wants to plot (with Matplotlib) the surface of an
implicit surface (at least it was his presented example).


Your comment "of course, plotting a sphere can be done in
spherical coordinates" is actually the right thought process.
Spherical coordinates is how you parametrize your spherical
surface. Pick a coordinate system that is relevant to your
problem at hand and use it.


Sorry Ben, but this is not an answer. P.K. clearly states that his
case is more complicated, and no parametrization is likely.
Anyway, the spherical exercise as it is presented uses the 3D
constraint, it is not parametric.

The general solution is the *polygonization of the implicit
surface*, which is a well established technology (although
non-trivial). For example the /marching cubes / marching
simplices/ algorithms and their variants.
These are techniques for the polygonization of a mesh.

If P.K. has an analytic formula for his distributions, and is able
to compute gradients, etc., there are some more efficient
techniques, but in general it is the case for solving the equation
F(x,y,z)=0 for {x,y,z} ; here Matplotlib doesn't offer (yet) any
tools if I am not mistaken.

Jerzy Karczmarczuk
Caen, France.




--

___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users




--


___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] savefig and StringIO error on Python3

2014-11-01 Thread Julien Hillairet
Many Thanks for your support.

It is Python 3.3.5 and matplotlib 1.4.0

I've also found that it worked with ByteIO(), but then I was stuck by the
encode/decode things. Thanks very much !

The traceback is below:

Traceback (most recent call last):

  File "", line 1, in 
runfile('/home/hash/example.py', wdir='/home/hash')

  File
"/usr/lib/python3.3/site-packages/spyderlib/widgets/externalshell/sitecustomize.py",
line 586, in runfile
execfile(filename, namespace)

  File
"/usr/lib/python3.3/site-packages/spyderlib/widgets/externalshell/sitecustomize.py",
line 48, in execfile
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)

  File "/home/hash/example.py", line 10, in 
fig.savefig(sio, format="png")

  File "/usr/lib64/python3.3/site-packages/matplotlib/figure.py", line
1470, in savefig
self.canvas.print_figure(*args, **kwargs)

  File "/usr/lib64/python3.3/site-packages/matplotlib/backend_bases.py",
line 2192, in print_figure
**kwargs)

  File
"/usr/lib64/python3.3/site-packages/matplotlib/backends/backend_agg.py",
line 525, in print_png
filename_or_obj, self.figure.dpi)

TypeError: string argument expected, got 'bytes'


2014-11-01 17:21 GMT+01:00 Scott Lasley :

> 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 = """
> 
> """.format(base64.encodebytes(sio.getvalue()).decode())
>
>
> For python 2.7.8 change html =""" to
>
> html = """
> 
> """ % base64.encodestring(sio.getvalue())
>
> Best regards,
> Scott
>
>
> On Nov 1, 2014, at 7:37 AM, Julien Hillairet 
> 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 = """
> > ...a bunch of text and html here...
> > 
> > ...more text and html...
> > """ % sio.getvalue().strip()
> >
> >
> --
>
>
--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] plot arbitrary 3D surface

2014-11-01 Thread Jerzy Karczmarczuk


Le 01/11/2014 20:34, Benjamin Root a écrit :
Actually, my response is still completely valid. You can only plot 
surfaces that can be represented parametrically in two dimensions. 
Find me a single plotting library that can do differently without 
having to get to this final step.


1. I did not claim  that you said something invalid, only that it seemed 
weakly appropriate for Peter Karpedjiev.


2. Unfortunately NOW you say something inexact. Of course you can plot 
implicit surfaces without 2D parametrization. All the ray-tracing 
technology is adapted to that.


POV-Ray, etc., if you want some names. Some terrain renderers, such as 
Terragen use it as well. YafaRay was once embeddable in Blender.


I am sorry if the answer is unsatisfactory to you, but it is the 
correct one to give.
3. But "my satisfaction" is not the issue. I tried to direct Peter in 
some *usable* direction, according to my experience.


Since the implementation of marching cubes, and other similar techniques 
is awkward, not very efficient in Python (I tried it), I suggest very 
strongly that Peter direct himself -at least temporarily - to the RT 
methods.


If he wishes, I might help him in private. Writing a Ray Tracer in 
Python/numpy is not so difficult (I gave it as student projects a few 
times), and of course everything functional may be programmed in POV-Ray.


Best regards.

Jerzy K.



--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] savefig and StringIO error on Python3

2014-11-01 Thread Julien Hillairet
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 :

> 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 = """
> 
> """.format(base64.encodebytes(sio.getvalue()).decode())
>
>
> For python 2.7.8 change html =""" to
>
> html = """
> 
> """ % base64.encodestring(sio.getvalue())
>
> Best regards,
> Scott
>
>
> On Nov 1, 2014, at 7:37 AM, Julien Hillairet 
> 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 = """
> > ...a bunch of text and html here...
> > 
> > ...more text and html...
> > """ % sio.getvalue().strip()
> >
> >
> --
>
>
--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] plot arbitrary 3D surface

2014-11-01 Thread Benjamin Root
Jerzy,

I really do not wish to get into an argument with you. This seems to happen
every time you come onto this mailing list. If "winning" this argument is
so important to you, then you may have it. I will not continue to split
hairs with you.

Thank you for mentioning the concept of implicit surfaces and marching
cubes. I am glad that is helpful to the original poster.

Cheers!
Ben Root

On Sat, Nov 1, 2014 at 4:38 PM, Jerzy Karczmarczuk <
jerzy.karczmarc...@unicaen.fr> wrote:

>
> Le 01/11/2014 20:34, Benjamin Root a écrit :
>
>  Actually, my response is still completely valid. You can only plot
> surfaces that can be represented parametrically in two dimensions. Find me
> a single plotting library that can do differently without having to get to
> this final step.
>
>
> 1. I did not claim  that you said something invalid, only that it seemed
> weakly appropriate for Peter Karpedjiev.
>
> 2. Unfortunately NOW you say something inexact. Of course you can plot
> implicit surfaces without 2D parametrization. All the ray-tracing
> technology is adapted to that.
>
> POV-Ray, etc., if you want some names. Some terrain renderers, such as
> Terragen use it as well. YafaRay was once embeddable in Blender.
>
>  I am sorry if the answer is unsatisfactory to you, but it is the correct
> one to give.
>
> 3. But "my satisfaction" is not the issue. I tried to direct Peter in some
> *usable* direction, according to my experience.
>
> Since the implementation of marching cubes, and other similar techniques
> is awkward, not very efficient in Python (I tried it), I suggest very
> strongly that Peter direct himself -at least temporarily - to the RT
> methods.
>
> If he wishes, I might help him in private. Writing a Ray Tracer in
> Python/numpy is not so difficult (I gave it as student projects a few
> times), and of course everything functional may be programmed in POV-Ray.
>
> Best regards.
>
> Jerzy K.
>
>
>
>
>
> --
>
> ___
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>
--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] matplotlib save image as postscript, when xlabel is saved as text and not path

2014-11-01 Thread oren
How can I save a matplotlib figure with text as a postscript image and that
the text will be saved as text. Currently when I save the image as
postscript all the text in the image ( xlabel, ylabel etc.. ) is saved as
path and not as text.. Is it possible to save it as text?

If I use the following code ( use latex)

matplotlib.rcParams["text.usetex"] = True
and save the image as postscript the text is saved as text.. But I do not
want to use latex.. Is it possible without latex?


Thanks


Question also on stackoverflow
http://stackoverflow.com/questions/26649266/matplotlib-save-image-as-postscript-when-xlabel-is-saved-as-text-and-not-path



--
View this message in context: 
http://matplotlib.1069221.n5.nabble.com/matplotlib-save-image-as-postscript-when-xlabel-is-saved-as-text-and-not-path-tp44261.html
Sent from the matplotlib - users mailing list archive at Nabble.com.

--
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users