リッカートスケールで得たアンケート・データの視覚化:likert Package + HH package (その3)
以前の「リッカートスケールで得たアンケート・データの視覚化:likert Package + HH package (その2)」への追記です。
回答の中に0%があると,グラフにも0%と出てしまうので,それを消したいと思っていたころ,displaying percentage per category in likert stacked proportion barplots に方法があったので,そちらを用いることにした。myPanelFuncの後半部分の変更。
myPanelFunc <- function(...){ panel.likert(...) vals <- list(...) DF <- data.frame(x=vals$x, y=vals$y, groups=vals$groups) ### some convoluted calculations here... grps <- as.character(DF$groups) for(i in 1:length(origNames)){ grps <- sub(paste0('^',origNames[i]),i,grps) } DF <- DF[order(DF$y,grps),] DF$correctX <- ave(DF$x,DF$y,FUN=function(x){ x[x < 0] <- rev(cumsum(rev(x[x < 0]))) - x[x < 0]/2 x[x > 0] <- cumsum(x[x > 0]) - x[x > 0]/2 return(x) }) subs <- sub(' Positive$','',DF$groups) collapse <- subs[-1] == subs[-length(subs)] & DF$y[-1] == DF$y[-length(DF$y)] DF$abs <- abs(DF$x) DF$abs[c(collapse,FALSE)] <- DF$abs[c(collapse,FALSE)] + DF$abs[c(FALSE,collapse)] DF$correctX[c(collapse,FALSE)] <- 0 DF <- DF[c(TRUE,!collapse),] DF$perc <- round(ave(DF$abs,DF$y,FUN=function(x){x/sum(x) * 100}), 0) ## Here goes 6 lines that have been changes - AK # here we modify the column with labels a bit: DF$perc <- paste0(DF$perc,'%') # change all "0%" to blanks DF$perc[DF$perc == "0%"] <- "" # the argument label is a bit modified too panel.text(x=DF$correctX, y=DF$y, label=DF$perc, cex=0.7) }