Andrew McLean wrote:
> I'm a new user of matplotlib (athough I have been using both Matlab and
> Python for years).
> 
> I have an application where I need to display data as a set of filled
> circles. The centre and the radius of the circles are both specified in
> data coordinates. The data points have an additional scalar attribute,
> which is displayed using a pseudo-colour mapping.
> 
> I've hacked something together where the circles are approximated by
> polygons using either the axis fill method or the pylab fill function. I
> select the colour by calling the get_rgba method of a ScalarMappable
> object. In the following code snippet c is a tuple containg the x and y
> coords of the centre of the circle, the radius, and a scalar "value"
> 
> theta = arange(numSegs+1) * 2.0 * math.pi / numSegs
> cos_theta = cos(theta)
> sin_theta = sin(theta)
> for c in cart:
>     x = c[1] + c[3] * cos_theta
>     y = c[2] + c[3] * sin_theta
>     v = c[4]
>     fill(x, y, facecolor=mapper.to_rgba(v), linewidth=0.5)
> 
> It all works. However, I saw in the API documentation (and the source)
> that there is a Circle object in patch. I was hoping that using this
> rather than polygons would give better quality output and possibly
> smaller files. Now I can instantiate it
> 
>         circle = Circle((x,y), c[3], facecolor=cmapper.to_rgba(v))
> 
> but can't work out what to do with it! I've tried
> 
>         ax.add_patch( circle )

This works for me in the sense that I can put circles or ellipses on a 
plot.  Note that if you are trying to do this interactively you need to 
explicitly call draw() or draw_if_interactive() (pylab functions) after 
the call to add_patch, because the axis methods differ from pylab 
functions in that the latter automatically call draw_if_interactive() 
but the former do not.

The circle in data coordinates is a circle, however, only if you use a 
1:1 aspect ratio.  Does this suit your needs?  If so you can get it with 
the pylab axis('equal') or axis('scaled') command. Or do you really want 
to specify the radius of the circle in x-data units or in y-data units? 
  (I have no idea what a Dorling Cartogram is.)

> 
> and also
> 
>         trans = blend_xy_sep_transform( ax.transAxes, ax.transData  )

This doesn't sound like what you want at all; it is used when you want 
to specify the x-coordinate in normalized axes units and the 
y-coordinate in data units.

Eric

>         circle.set_transform( trans )
>         ax.add_patch( circle )
> 
> Neither work. Any ideas?
> 
> Regards,
> 
> Andrew

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to