1 # contributed by Michael Schindler
5 # get the lines from the graph
6 xax
= graph
.linaxis(min=-1, max=1.0, painter
=None)
7 yax
= graph
.linaxis(min=-1.3, max=1.3, painter
=None)
8 g
= graph
.graphxy(width
=10, ratio
=2, x
=xax
, y
=yax
)
9 fline
= g
.plot(graph
.function("y=sin(1.0/(x**2+0.02122))", points
=1000))
10 horiz
= g
.plot(graph
.function("y=0.5*x", points
=2))
13 # convert paths to normpaths (for efficiency reasons only)
14 fline
= path
.normpath(fline
.style
.path
)
15 horiz
= path
.normpath(horiz
.style
.path
)
17 splith
, splitf
= horiz
.intersect(fline
)
19 # create gray area (we do not use simple clipping)
20 area
= horiz
.split([splith
[0]])[0]
21 for i
in range(0, len(splith
)-2, 2):
22 area
= area
.glue(fline
.split([splitf
[i
], splitf
[i
+1]])[1])
23 area
= area
.glue(horiz
.split([splith
[i
+1], splith
[i
+2]])[1])
24 area
= area
.glue(fline
.split([splitf
[-2], splitf
[-1]])[1])
25 area
= area
.glue(horiz
.split([splith
[-1]])[1])
26 area
.append(path
.lineto(*g
.vpos(1, 0)))
27 area
.append(path
.lineto(*g
.vpos(0, 0)))
28 area
.append(path
.closepath())
32 # draw first the area, then the function
33 c
.fill(area
, [color
.gray(0.6)])
34 c
.stroke(fline
, [style
.linewidth
.Thick
, style
.linejoin
.round])
36 c
.writetofile("partialfill")