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 <[email protected]>
> 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 [email protected] https://lists.sourceforge.net/lists/listinfo/matplotlib-users
