creating shaded areas

2) Is it a bug that the polygon is not filled

Yes, none of the rest of the drawing interface uses Polygon so I
hadn't noticed it. In patches.py, replace line 330 with

        renderer.draw_polygon(gc, rgbFace, vertices)

Below is your (modified) original script, with comments that answer
your questions. With the patch above and some changes I made, it now
works (cool). It would be nice to figure out how to properly include
this in the regular API.

JDH

from matplotlib.matlab import *
from matplotlib.patches import Rectangle, Polygon

def filly(x,y1,y2,**kwargs):
     ax = gca()
     xy =
     for xi, yi in zip(x,y1):
         xy.append( (xi,yi) )
     for xi, yi in zip(x[::-1],y2[::-1]):
         xy.append( (xi,yi) )
     xy.append( xy[0] )

     # see
     # http://matplotlib.sourceforge.net/matplotlib.transforms.html
     # for information on the new transform system. You can place
     # objects in a variety of coord systems, most freqeuntly data or
     # axes. data are the old-style coords you are used to. axes
     # coords are normalized on a 0-1 scale. The xaxis and yaxis
     # instances store default transforms so you can easily create new
     # objects in either coord system. ax.xaxis.transData transforms
     # data units to display units for the xaxis. ax.xaxis.transAxis
     # transforms axis units to display units. You have done it right
     # here.
     polygon = Polygon(
         ax.dpi, ax.bbox,
         xy,
         transx = ax.xaxis.transData, # what does this do?
         transy = ax.yaxis.transData, # and this??
         **kwargs)

     ax.add_patch(polygon)
     return polygon

figure(1)
t = arange(0.0, 1.0, 0.01)
s_mean = 0.5*sin(2*2*pi*t)
s_lo = s_mean-0.1
s_hi = s_mean+0.1
#plot(t,s_mean,'k')
filly(t,s_lo,s_hi,fill=1,facecolor='g')

# I haven't decided yet on how to handle autoscaling with patches
# since there is no efficient easy way to get the patch's extent in
# data coords. Instead, I update the datalim manually in plot
# commands that use pataches
gca().xaxis.datalim.update((min(t), max(t)))
gca().yaxis.datalim.update((min(s_lo), max(s_hi)))

# now this should work since the data lim are updated
gca().xaxis.autoscale_view()
gca().yaxis.autoscale_view()
#savefig('filly')
show()