[Matplotlib-users] PolyCollection and transforms
I am trying to animate the movement of a polygon and thought a sound approach would be to in a loop where I redraw after altering the offsets value. However I seem to not be able to scale the polygon correctly. Here is an example of only trying to place a polygon (square) at 1,1. You can see the translation is correct, but the scaling is wrong--the polygon is only about a pixel high & wide. Dave -- import pylab as P from matplotlib import collections, axes, transforms import matplotlib.numerix as N fig = P.figure() a = fig.add_subplot(1,1,1) verts = N.array([[0,0],[1,0],[1,1],[0,1]]) offsets = [[1,1]] col = collections.PolyCollection([verts], offsets=offsets, transOffset=a.transData) a.add_collection(col) trans = transforms.scale_transform(transforms.Value(1),transforms.Value(1)) col.set_transform(trans) a.set_xlim([-5,5]) a.set_ylim([-5,5]) P.show() -- - SF.Net email is sponsored by: The Future of Linux Business White Paper from Novell. From the desktop to the data center, Linux is going mainstream. Let it simplify your IT future. http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Drawing filled circles (discs)
In the solution I gave, CirclePolygon has a resolution argument for number of vertices to approximate the circle (default=20). You could increase that value to some more appropriate level: import matplotlib from matplotlib.patches import CirclePolygon from matplotlib.collections import PolyCollection import pylab fig=pylab.figure() ax=fig.add_subplot(111) resolution = 50 # the number of vertices N = 20 x = pylab.rand(N) y = pylab.rand(N) radii = 0.1*pylab.rand(N) colors = 100*pylab.rand(N) verts = [] for x1,y1,r in zip(x, y, radii): circle = CirclePolygon((x1,y1), r, resolution) verts.append(circle.get_verts()) p = PolyCollection(verts, cmap=matplotlib.cm.jet) p.set_array(pylab.array(colors)) ax.add_patch(p) pylab.colorbar(p) ax.axis('equal') pylab.show() -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of sidimok Sent: Thursday, September 20, 2007 4:59 AM To: matplotlib-users@lists.sourceforge.net Subject: Re: [Matplotlib-users] Drawing filled circles (discs) Mika, David P (GE, Research) wrote: > > How about this solution? I'm a complete newbe, but this seems to do > the trick. I didn't see a CircleCollection so I used CirclePolygon to > generate vertices for a circle; these I grab and toss into a > PolyCollection. Enjoy, Dave > > Hi all! Thank you very much indeed for the help, both solutions work like a charm. However Dave's one gives rough cirlces, approximated by polygones, which is not very accurate for my buisness. May I ask how to create a circleCollection as Jouni "The Expert" proposed? You can find below one of my plottings rendered by Jouni's first trick. http://www.nabble.com/file/p12793350/image.png -- View this message in context: http://www.nabble.com/Drawing-filled-circles-%28discs%29-tf4441651.html# a12793350 Sent from the matplotlib - users mailing list archive at Nabble.com. - This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/ ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users - This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/ ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Drawing filled circles (discs)
How about this solution? I'm a complete newbe, but this seems to do the trick. I didn't see a CircleCollection so I used CirclePolygon to generate vertices for a circle; these I grab and toss into a PolyCollection. Enjoy, Dave import matplotlib from matplotlib.patches import CirclePolygon from matplotlib.collections import PolyCollection import pylab fig=pylab.figure() ax=fig.add_subplot(111) N = 20 x = pylab.rand(N) y = pylab.rand(N) radii = 0.1*pylab.rand(N) colors = 100*pylab.rand(N) verts = [] for x1,y1,r in zip(x, y, radii): circle = CirclePolygon((x1,y1), r) verts.append(circle.get_verts()) p = PolyCollection(verts, cmap=matplotlib.cm.jet) p.set_array(pylab.array(colors)) ax.add_patch(p) pylab.colorbar(p) ax.axis('equal') pylab.show() -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jouni K. Seppänen Sent: Wednesday, September 19, 2007 11:03 AM To: matplotlib-users@lists.sourceforge.net Subject: Re: [Matplotlib-users] Drawing filled circles (discs) sidimok <[EMAIL PROTECTED]> writes: > Well, let's take the one you've proposed the last time. How than can i > put a colorbar beside the plot? Add in the imports from matplotlib.colorbar import ColorbarBase, make_axes and change the myscatter function to def myscatter(ax, colormap, x, y, radii, colors): for x1,y1,r,c in zip(x, y, radii, colormap(colors)): ax.add_patch(Circle((x1,y1), r, fc=c)) cax, _ = make_axes(ax) ColorbarBase(cax, cmap=colormap) A better solution is probably to implement a CircleCollection similarly to the other collections. -- Jouni K. Seppänen http://www.iki.fi/jks - This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/ ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users - This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/ ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users