On Thu, Jul 10, 2008 at 8:28 AM, Stefan Schenk <Stefan.Schenk@physik.uni-augsburg.de> wrote:

Am Mittwoch 09 Juli 2008 23:32 schrieb Mico Filós:

> I want to plot some data curves on a graph that contains a filled area.You got the correct idea. You have to stroke the paths after you painted

> Imagine for example that in

> http://pyx.sourceforge.net/gallery/graphs/integral.py

> I want to plot, apart from the curve (x,f(x)) and the area under it,

> another curve (x,g(x)).

> To define the area I need to finish the graph, to make the paths

> available. But then the area covers

> my data curves... How could I solve this?

>

> My feeling is that I am missing something trivial :)

>

>

> figure.plot(graph.data.list(...))

> figure.finish()

>

> # Define my area

> area = ...

> figure.fill(area) # The curves are under the area

>

> I have tried to assign the paths to some variables, to stroke them

> after calling figure.finish,

> but it does seem to work.

the area. However this is not possible after finish() in the same graphxy

object. But you can extract the curves from figure and just use a new

canvas like in http://pyx.sourceforge.net/gallery/graphs/partialfill.html

I think, there is even a simpler way: it is not necessary to call g.finish() in

the example code integral.py, it is sufficient just to plot the plotitem "d" by

calling g.doplot(d) instead. After that, the path is accessible.

So the following should work (in integral.py):

...

d = g.plot(graph.data.function("y(x)=(x-3)*(x-5)*(x-7)"))

d1 = g.plot(graph.data.function("y(x)=(x-3)*(x-5)*(x-9)"))

g.doplot(d)

p = d.path # the path is available after the plotitem is plotted

[ fill the area below d ]

g.doplot(d1)

p1 = d1.path # the path is available after the plotitem is plotted

[ fill the area below d1 ]

...

With that, the second function is plotted on top of the area below d1

HTH,

Axel

the example code integral.py, it is sufficient just to plot the plotitem "d" by

calling g.doplot(d) instead. After that, the path is accessible.

So the following should work (in integral.py):

...

d = g.plot(graph.data.function("y(x)=(x-3)*(x-5)*(x-7)"))

d1 = g.plot(graph.data.function("y(x)=(x-3)*(x-5)*(x-9)"))

g.doplot(d)

p = d.path # the path is available after the plotitem is plotted

[ fill the area below d ]

g.doplot(d1)

p1 = d1.path # the path is available after the plotitem is plotted

[ fill the area below d1 ]

...

With that, the second function is plotted on top of the area below d1

HTH,

Axel