Hello again, and thank you very much for the answer, suddenly it all got much clearer to me. The only 'issue' I am having is (from screenshot) what happens to the line pointing to Logs when I try to offset it a little bit on the Y axis. It looks like either the angleA or angleB is wrong, but I don't see and reason why it would be as the X coordinates does not change.
Another thing I do not quite understand is what that patchB does. figure(1, figsize=(6,6)) ax = axes([0.1, 0.1, 0.8, 0.8]) labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' fracs = [45, 135 ,1, 1] p = pie(fracs) foo = None for p1, l1 in zip(p[0], labels): r = p1.r dr = r*0.1 t1, t2 = p1.theta1, p1.theta2 theta = (t1+t2)/2. xc = cos(theta/180.*pi)*r yc = sin(theta/180.*pi)*r x1 = cos(theta/180.*pi)*(r+dr) y1 = sin(theta/180.*pi)*(r+dr) if x1 > 0 : x1 = r+2*dr ha, va = "left", "center" cstyle="angle,angleA=180,angleB=%f"%(-theta,) print >> sys.stderr, ha, ",A,", va else: x1 = -(r+2*dr) ha, va = "right", "center" cstyle="angle,angleA=0,angleB=%f"%(theta,) print >> sys.stderr, ha, ",B,", va if foo: if theta - foo < 10: print >>sys.stderr, "Overlapping, offsetting a little bit" y1 = y1 + 0.1 foo = theta annotate(l1, (xc, yc), xycoords="data", xytext=(x1, y1), textcoords="data", ha=ha, va=va, arrowprops=dict(arrowstyle="-", connectionstyle=cstyle, patchB=p1)) - Rune 2010/3/23 Jae-Joon Lee <lee.j.j...@gmail.com> > This should be doable using the annotation. Here is a simple cook-up I > just did. it uses a naive algorithm to place the labels, but I guess > it gives you an idea how things work. > a screenshot is attached. > > Regards, > > -JJ > > > from pylab import * > > # make a square figure and axes > figure(1, figsize=(6,6)) > ax = axes([0.1, 0.1, 0.8, 0.8]) > > labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' > fracs = [15,30,45, 10] > > explode=(0, 0.05, 0, 0) > p = pie(fracs, explode=explode, shadow=True) > title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5}) > > for p1, l1 in zip(p[0], labels): > r = p1.r > dr = r*0.1 > t1, t2 = p1.theta1, p1.theta2 > theta = (t1+t2)/2. > > xc, yc = r/2.*cos(theta/180.*pi), r/2.*sin(theta/180.*pi) > x1, y1 = (r+dr)*cos(theta/180.*pi), (r+dr)*sin(theta/180.*pi) > if x1 > 0 : > x1 = r+2*dr > ha, va = "left", "center" > tt = -180 > cstyle="angle,angleA=0,angleB=%f"%(theta,) > else: > x1 = -(r+2*dr) > ha, va = "right", "center" > tt = 0 > cstyle="angle,angleA=0,angleB=%f"%(theta,) > > annotate(l1, > (xc, yc), xycoords="data", > xytext=(x1, y1), textcoords="data", ha=ha, va=va, > arrowprops=dict(arrowstyle="-", > connectionstyle=cstyle, > patchB=p1)) > > show() >
<<attachment: tmpkZslt5.png>>
------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev
_______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users