############################################################ # #Autor: paul@statistiker-wg.de #Date: #Beschreibung: Funktion zu Erzeugung einer foreach-Schleifen-Liste # um ein Kreisdiagramm mit TikZ zu konstruieren # ############################################################ ############################################################ # # x ... Vektor, z.B. für die statistiker-wg.de # wg <- c(rep("Jule",12), rep("Janna",10), rep("Marcus",9), rep("Paul",8), rep("gemeinsam",55)) # ############################################################ latex.pie <- function(x){ n <- length(x) names <- names(x) if(is.null(names)) names <- names(table(x)) m <- length(names) #Berechnung der Kreissektoren angle <- rep(NA, m) for(i in 1:m){ angle[i] <- round((table(x)[[i]]/n)*360, 0) } angle[m] <- angle[m] + (360 - sum(angle)) #Ausgabe schreiben if((round(angle[1]/2,0)<45) | (round(angle[1]/2,0)>=315)){ out <- paste(0,"/",angle[1],"/",round(angle[1]/2, 0),"/",round(table(x)[[1]]/n*100,1),"/right/",names[1], sep="") }else{ if(round(angle[1]/2,0)<135){ out <- paste(0,"/",angle[1],"/",round(angle[1]/2, 0),"/",round(table(x)[[1]]/n*100,1),"/above/",names[1], sep="") }else{ if(round(angle[1]/2,0)<225){ out <- paste(0,"/",angle[1],"/",round(angle[1]/2, 0),"/",round(table(x)[[1]]/n*100,1),"/left/",names[1], sep="") }else{ out <- paste(0,"/",angle[1],"/",round(angle[1]/2, 0),"/",round(table(x)[[1]]/n*100,1),"/below/",names[1], sep="")} } } for(i in 2:m){ if(((sum(angle[1:i-1])+sum(angle[1:i]))/2<45) | ((sum(angle[1:i-1])+sum(angle[1:i]))/2>=315)){ out <- paste(out,",",sum(angle[1:i-1]),"/",sum(angle[1:i]),"/",round((sum(angle[1:i-1])+sum(angle[1:i]))/2,0),"/",round(table(x)[[i]]/n*100,1),"/right/",names[i], sep="") }else{ if((sum(angle[1:i-1])+sum(angle[1:i]))/2<135){ out <- paste(out,",",sum(angle[1:i-1]),"/",sum(angle[1:i]),"/",round((sum(angle[1:i-1])+sum(angle[1:i]))/2,0),"/",round(table(x)[[i]]/n*100,1),"/above/",names[i], sep="") }else{ if((sum(angle[1:i-1])+sum(angle[1:i]))/2<225){ out <- paste(out,",",sum(angle[1:i-1]),"/",sum(angle[1:i]),"/",round((sum(angle[1:i-1])+sum(angle[1:i]))/2,0),"/",round(table(x)[[i]]/n*100,1),"/left/",names[i], sep="") }else{ if((sum(angle[1:i-1])+sum(angle[1:i]))/2<315){ out <- paste(out,",",sum(angle[1:i-1]),"/",sum(angle[1:i]),"/",round((sum(angle[1:i-1])+sum(angle[1:i]))/2,0),"/",round(table(x)[[i]]/n*100,1),"/below/",names[i], sep="") }else{ out <- paste(out,",",sum(angle[1:i-1]),"/",sum(angle[1:i]),"/",round((sum(angle[1:i-1])+sum(angle[1:i]))/2,0),"/",round(table(x)[[i]]/n*100,1),"/right/",names[i], sep="") } } } } } return(out) }