From: Axel Freyn <freynaxe@us...>  20080710 07:52:54

Hi Mirco and Stefan, On Thu, Jul 10, 2008 at 8:28 AM, Stefan Schenk < Stefan.Schenk@...> 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. > > 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. > > > You got the correct idea. You have to stroke the paths after you painted > 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)=(x3)*(x5)*(x7)")) d1 = g.plot(graph.data.function("y(x)=(x3)*(x5)*(x9)")) 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 