[Follow-up -- see at end] On 26-Jul-11 12:03:46, Ted Harding wrote: > On 26-Jul-11 11:26:14, Jim Lemon wrote: >> On 07/26/2011 02:40 AM, Naomi Robbins wrote: >>> Hello! >>> It's a shoot in the dark, but I'll try. If one has a total of 100 >>> (e.g., %), and three components of the total, e.g., >>> mytotal=data.frame(x=50,y=30,z=20), - one could build a pie chart >>> with >>> 3 sectors representing x, y, and z according to their proportions in >>> the total. >>> I am wondering if it's possible to build something very similar, but >>> not on a circle but in a square... >> >> >> Is this still going on? Okay, here's a square pie: >> >> squarePie<-function(slices,x0=0,y0=0,x1=1,y1=1,firstcall=TRUE,pos=1, >> col=NULL,show.values=TRUE,...) { >> sliceprop<-slices[1]/sum(slices) >> if(firstcall) { >> oldmar<-par(mar=c(2,2,3,2)) >> >> plot(0,xlim=c(0,1),ylim=c(0,1),xaxs="i",yaxs="i",type="n",axes=FALSE, >> xlab="",ylab="",...) >> if(is.null(col)) col=rainbow(length(slices)) >> } >> if(pos == 1) { >> ytop<-y0+(y1-y0)*sliceprop >> rect(x0,y0,x1,ytop,col=col[1]) >> if(show.values) text((x0+x1)/2,(y0+ytop)/2,slices[1]) >> y0<-ytop >> } >> if(pos == 2) { >> xright<-x0+(x1-x0)*sliceprop >> rect(x0,y0,xright,y1,col=col[1]) >> if(show.values) text((x0+xright)/2,(y0+y1)/2,slices[1]) >> x0<-xright >> } >> if(pos == 3) { >> ybottom<-y1-(y1-y0)*sliceprop >> rect(x0,ybottom,x1,y1,col=col[1]) >> if(show.values) text((x0+x1)/2,(ybottom+y1)/2,slices[1]) >> y1<-ybottom >> } >> if(pos == 4) { >> xleft<-x1-(x1-x0)*sliceprop >> rect(xleft,y0,x1,y1,col=col[1]) >> if(show.values) text((xleft+x1)/2,(y0+y1)/2,slices[1]) >> x1<-xleft >> } >> pos<-ifelse(pos==4,1,pos+1) >> if(length(slices > 1)) >> >> squarePie(slices[-1],x0,y0,x1,y1,firstcall=FALSE,pos=pos,col=col[-1]) >> if(firstcall) par(oldmar) >> } >> >> squarePie(c(4,3,6,2,5,1),main="A square meal from Oz") >> >> Jim > > A very nice implementation, Jim! However, its existence allows me > to test some perceptual concerns I have had about the "square pie > chart" concept -- not unlrelated to the one we all have about > ordinary pie charts, but somewhat different in nature. > > Namely, it is interesting to comare the impressions one forms of: > > squarePie(c(10,9,8,7,6,5,4,3,2,1),main="A square meal from Oz") > X11() > squarePie(c(1,2,3,4,5,6,7,8,9,10),main="A square meal from Oz") > > Possibly there may be scope for additional flexibility regarding > the order in which the rectangles are placed in the chart. I know > the user can select this by re-arranging 'slices', but maybe the > function itself could try to be "intelligent" about this (though > I'm at a loss at the moment to suggest what the basis for this > should be)! > > Best wishes, > Ted.
And the comparison is even more interesting if (after the above) you do: dev.set(2) # X11cairo # 2 squarePie(c(5,1,2,7,3,10,4,6,8,9),main="A square meal from Oz") dev.set(3) # X11cairo # 3 squarePie(rev(c(5,1,2,7,3,10,4,6,8,9)),main="A square meal from Oz") Ted. -------------------------------------------------------------------- E-Mail: (Ted Harding) <ted.hard...@wlandres.net> Fax-to-email: +44 (0)870 094 0861 Date: 26-Jul-11 Time: 13:49:03 ------------------------------ XFMail ------------------------------ ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.