From: John H. <jdh...@ac...> - 2004-03-08 19:15:37
|
>>>>> "Andrew" == Andrew Straw <str...@as...> writes: Andrew> 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() |