Mercurial > forge
view main/plot/pie.m @ 0:6b33357c7561 octave-forge
Initial revision
author | pkienzle |
---|---|
date | Wed, 10 Oct 2001 19:54:49 +0000 |
parents | |
children |
line wrap: on
line source
## Copyright (C) 1999 Daniel Heiserer ## ## This program is free software. ## ## This file is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this file; see the file COPYING. If not, write to the Free ## Software Foundation, 59 Temple Place - Suite 330, Boston, MA ## 02111-1307, USA. ## pie(Y) ## Produce pie graph ## ## pie(Y,['label1';'label2';...;'labeln']); ## Produce labelled pie graph ## AUTHOR: Daniel Heiserer <Daniel.heiserer@physik.tu-muenchen.de> function pie(Y,desc) refinement=20; ##refinement=5; phi=0:refinement:360; Yphi=abs(Y)/sum(abs(Y))*360; Yphi=cumsum(Yphi); Yn=0:360/refinement:Yphi(1); if Yn(length(Yn))~=Yphi(1) Yn=[Yn,Yphi(1)]; end held = ishold; unwind_protect patch([0,cos(Yn*2*pi/360)],[0,sin(Yn*2*pi/360)],num2str(1)); hold on; for jj=2:length(Y) ## find how many degrees are inside the jj-th pie ## which degrees Yn=Yphi(jj-1):360/refinement:Yphi(jj); if length(Yn)>0 if Yn(length(Yn))~=Yphi(jj) Yn=[Yn,Yphi(jj)]; end patch([0,cos(Yn*2*pi/360)],[0,sin(Yn*2*pi/360)],num2str(jj)); else end end ## reserve some place for a legend axis([-1 2 -1 1]) ## ok assume we have some text here: if nargin==2 if length(Y)~=size(desc,1) error('pie-data and pie-string mismatch'); end for jj=1:size(desc,1) plot(0,0,[num2str(jj),';',desc(jj,:),';']); end end unwind_protect_cleanup if !held, hold off; end end_unwind_protect end