From: John H. <jdh...@ac...> - 2005-06-29 20:13:18
|
>>>>> "James" == James Boyle <bo...@ll...> writes: James> Say I have drawn a plot and now I want to make an James> annotation on the top of the plot outside the axis. In my James> case I want to put a filled triangle up there in a certain James> location. I am using a polygon - patch to make the figure. James> How does one do this? I have tried turning the clipping off James> but to no avail - I can put my triangle anywhere within the James> axis but if it is outside it disappears. In the manual James> there is an example for placing text outside the axis but James> not patches. The problem you are encountering is that the Axes will automatically set the clipbox when you call add_patch, so you need to make the call to turn off clipping *after* adding it to the axes from pylab import figure, show from matplotlib.patches import RegularPolygon fig = figure() ax = fig.add_subplot(111) # above the yaxis and centered on xaxis; Axes coords tri = RegularPolygon((0.5, 1.05), 3, radius=0.2, transform=ax.transAxes) # adding the patch to the axes automatically sets the clipbox ax.add_patch(tri) # so you need to turn it off after adding it tri.set_clip_on(False) show() You can also add patches and lines directly to the Figure instance, as follows, but these are drawn before the Axes and so are behind them from pylab import figure, show from matplotlib.patches import RegularPolygon fig = figure() ax = fig.add_axes([0.1,0.1, 0.8, 0.6]) # Figure coords tri = RegularPolygon((0.5, 0.8), 3, radius=0.2, transform=fig.transFigure) fig.patches.append(tri) show() If there is a need to customize this further, let me know. Eg, we could move the drawing call for the lines and patches below the Axes draw so they come out on top. JDH |