data<-InsectSprays palette<-c("indianred2","khaki","lavenderblush2","lemonchiffon4","lightcyan1","lightgoldenrod4") ### method using aggregate dead<-aggregate(count ~ spray,data=InsectSprays,sum) pie(dead$count,labels=dead$spray,col=palette) ### method using a loop data<-InsectSprays palette<-c("slategray2","salmon2","seagreen4","mistyrose3","peachpuff","navajowhite4") insecticide<-levels(as.factor(data$spray)) dead<-NULL for(i in 1:length(insecticide)){ rows<-which(data$spray==insecticide[i]) dead<-c(dead,sum(data[rows,1])) } pie(dead,labels=insecticide,col=palette) ### method using tapply data<-InsectSprays palette<-c("cadetblue3","chocolate1","coral4","darkgoldenrod2","deepskyblue1","gainsboro") dead<-tapply(InsectSprays$count,InsectSprays$spray,sum) pie(dead,labels=levels(as.factor(InsectSprays$spray)),init.angle=180,col=palette) ### method using circlise install.packages("circlize") library(circlize) dead<-aggregate(count ~ spray,data=InsectSprays,sum) total<-sum(dead$count) m<-cumsum(dead$count) n<-nrow(dead) x<-360*m/total x<-c(0,x) plot(NULL,xlim=c(-max(m),max(m)),ylim=c(-max(m),max(m)),axes=F,ann=F, type="n",xlab="",ylab="") # set up a blank plot area with size based on max mass (log base 2) for (i in 1:n){ draw.sector(start.degree=x[i],end.degree=x[i+1], clock.wise=FALSE,rou1=100,rou2=650,col=palette[i],border = "black",lwd = 1,lty =0) } angles<-NULL for(i in 1:n) angles<-c(angles,0.5*(x[i+1]-x[i])) letter_angle<-angles+x[1:6] xval<-400*cos(letter_angle*pi/180) yval<-400*sin(letter_angle*pi/180) text(xval,yval,as.character(dead$spray),cex=3)